Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式:如何在搜索结果中包含行尾?_Php_Regex - Fatal编程技术网

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