正则表达式:如何在搜索结果中包含行尾?

时间:2016-05-06 19:58:45

标签: php regex

我有以下字符串:

#key1=value1|#key2=value2|#key3=value3

我正在使用此正则表达式来匹配键和值:

/#(.*)\=(.*)[\|\v\h|]/gU

适用于key1和key2,但不捕获key3

演示:https://regex101.com/r/eU6lV8/2

有关如何捕获key3的任何想法?

1 个答案:

答案 0 :(得分:5)

简单解决方案

通过将$替换为[\|\v\h|],在您的键/值对后设置一行((?:$|[\|\v\h|]))可能的匹配:

/#(.*)\=(.*)(?:$|[\|\v\h|])/gU

Demo

更好的解决方案

更好的是,您可以通过删除.*组来调整原始正则表达式的效率(正如anubhava在现已删除的评论中所建议的那样):

/#([^=]*)\=([^|]*)(?:$|[\|\v\h|])/gU

Demo

解释

原始正则表达式不起作用的原因是\v\h仅分别匹配垂直和水平空格。它们与根本没有任何空格的行的末尾不匹配。

小心谨慎

也就是说,作为Wiktor Stribiżew said in the comments,分割字符串通常更容易,而不是使用正则表达式进行复杂的解析。请确保您没有尝试解决XY problem的实例。

相关问题