Php 正则表达式:如何在搜索结果中包含行尾?
我有以下字符串:Php 正则表达式:如何在搜索结果中包含行尾?,php,regex,Php,Regex,我有以下字符串: #key1=value1|#key2=value2|#key3=value3 我使用此正则表达式匹配键和值: /#(.*)\=(.*)[\|\v\h|]/gU 这对key1和key2非常有效,但不能捕获key3 演示: 您知道如何捕获密钥3吗?简单解决方案 通过将[\\\v\h |]替换为(?:$)[\\\v\h |]),使您的键/值对后面的一行结尾($)可能匹配: 更好的解决方案 更好的是,您可以通过去掉*组(正如anubhava在现已删除的评论中所建议的那样),调整原
#key1=value1|#key2=value2|#key3=value3
我使用此正则表达式匹配键和值:
/#(.*)\=(.*)[\|\v\h|]/gU
这对key1和key2非常有效,但不能捕获key3
演示:
您知道如何捕获密钥3吗?简单解决方案
通过将[\\\v\h |]
替换为(?:$)[\\\v\h |])
,使您的键/值对后面的一行结尾($
)可能匹配:
更好的解决方案
更好的是,您可以通过去掉*
组(正如anubhava在现已删除的评论中所建议的那样),调整原始正则表达式以提高效率:
解释
原始正则表达式不起作用的原因是\v
和\h
分别只匹配垂直和水平空格。它们与没有任何空格的行的结尾不匹配
一句警告的话
这就是说,通常只拆分字符串比使用正则表达式进行复杂的解析更容易。确保您没有试图解决。简单解决方案的实例
通过将[\\\v\h |]
替换为(?:$)[\\\v\h |])
,使您的键/值对后面的一行结尾($
)可能匹配:
更好的解决方案
更好的是,您可以通过去掉*
组(正如anubhava在现已删除的评论中所建议的那样),调整原始正则表达式以提高效率:
解释
原始正则表达式不起作用的原因是\v
和\h
分别只匹配垂直和水平空格。它们与没有任何空格的行的结尾不匹配
一句警告的话
这就是说,通常只拆分字符串比使用正则表达式进行复杂的解析更容易。确保您没有试图解决的实例。为什么不先用
然后用=
分解字符串?如果确实需要正则表达式,请尝试#(.*)=(.*)([\v\h|].$)
显示您执行的命令和输出。为什么不先用|
分解字符串,然后用=
?如果确实需要正则表达式,请尝试#(.*)=(.*)([\v\h|].$)
显示执行的命令和输出。
/#(.*)\=(.*)(?:$|[\|\v\h|])/gU
/#([^=]*)\=([^|]*)(?:$|[\|\v\h|])/gU