我有以下字符串:
#key1=value1|#key2=value2|#key3=value3
Run Code Online (Sandbox Code Playgroud)
我正在使用此正则表达式来匹配键和值:
/#(.*)\=(.*)[\|\v\h|]/gU
Run Code Online (Sandbox Code Playgroud)
它适用于key1和key2,但不捕获key3
演示:https://regex101.com/r/eU6lV8/2
任何想法如何捕获key3?
$通过替换[\|\v\h|]为(?:$|[\|\v\h|]):在键/值对后面的行结束()可能匹配:
/#(.*)\=(.*)(?:$|[\|\v\h|])/gU
Run Code Online (Sandbox Code Playgroud)
更好的是,您可以通过删除.*组来调整原始正则表达式的效率(正如anubhava在现在删除的注释中所建议的那样):
/#([^=]*)\=([^|]*)(?:$|[\|\v\h|])/gU
Run Code Online (Sandbox Code Playgroud)
你原来的正则表达式不工作的原因是,\v与\h只匹配垂直和水平的空白,分别.它们与根本没有任何空格的行的末尾不匹配.
也就是说,正如WiktorStribiżew在评论中所说,分割字符串通常更容易,而不是使用正则表达式进行复杂的解析.确保您没有尝试解决XY问题的实例.
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |