我有以下字符串:
#key1=value1|#key2=value2|#key3=value3
我正在使用此正则表达式来匹配键和值:
/#(.*)\=(.*)[\|\v\h|]/gU
适用于key1和key2,但不捕获key3
演示:https://regex101.com/r/eU6lV8/2
有关如何捕获key3的任何想法?
答案 0 :(得分:5)
通过将$
替换为[\|\v\h|]
,在您的键/值对后设置一行((?:$|[\|\v\h|])
)可能的匹配:
/#(.*)\=(.*)(?:$|[\|\v\h|])/gU
更好的是,您可以通过删除.*
组来调整原始正则表达式的效率(正如anubhava在现已删除的评论中所建议的那样):
/#([^=]*)\=([^|]*)(?:$|[\|\v\h|])/gU
原始正则表达式不起作用的原因是\v
和\h
仅分别匹配垂直和水平空格。它们与根本没有任何空格的行的末尾不匹配。
也就是说,作为Wiktor Stribiżew said in the comments,分割字符串通常更容易,而不是使用正则表达式进行复杂的解析。请确保您没有尝试解决XY problem的实例。