我有以下字符串:
#key1=value1|#key2=value2|#key3=value3
我使用这个正则表达式来匹配键和值:
/#(.*)'=(.*)['|'v'h|]/gU
它适用于key1和key2,但不能捕获key3
演示:https://regex101.com/r/eU6lV8/2
你知道如何获取key3吗?
简单解决方案
通过将['|'v'h|]
替换为(?:$|['|'v'h|])
:,使行尾($
)可能与键/值对匹配
/#(.*)'=(.*)(?:$|['|'v'h|])/gU
演示
更好的解决方案
更好的是,您可以通过去掉.*
组来调整原始正则表达式以提高效率(正如anubhava在一条现已删除的评论中所建议的那样):
/#([^=]*)'=([^|]*)(?:$|['|'v'h|])/gU
演示
解释
原始regex不起作用的原因是'v
和'h
分别只匹配垂直和水平空白。它们与后面根本没有空格的行的末尾不匹配。
一句忠告
也就是说,正如Wiktor Stribiżew在评论中所说,只拆分字符串通常比使用regex进行复杂的解析更容易。请确保您没有试图解决XY问题的实例。