Php 为什么';我的正则表达式不匹配包含$character的文本吗?
我正在使用Php 为什么';我的正则表达式不匹配包含$character的文本吗?,php,regex,preg-match-all,pcre,Php,Regex,Preg Match All,Pcre,我正在使用preg\u match\u all()在用户模板中搜索一些自定义标记。但是,函数不匹配包含$字符的字符串 模板标记可以有两种形式:[TagName]和[TagName |此处一些文本|此处一些其他文本] 下面是我正在使用的正则表达式: preg_match_all('/\[([^\]\|]+)(\|)?([^\]\|]*)\|?([^\]\|]*)\]/',$thank_you_screen_text,$thank_you_tags,PREG_SET_ORDER); 这些字符串都匹
preg\u match\u all()
在用户模板中搜索一些自定义标记。但是,函数不匹配包含$
字符的字符串
模板标记可以有两种形式:[TagName]
和[TagName |此处一些文本|此处一些其他文本]
下面是我正在使用的正则表达式:
preg_match_all('/\[([^\]\|]+)(\|)?([^\]\|]*)\|?([^\]\|]*)\]/',$thank_you_screen_text,$thank_you_tags,PREG_SET_ORDER);
这些字符串都匹配:
[Name1]
[AddTour|Yes!|no]
[NumberOfPersonsForRoomOut| x 2889 =| ]
[CardholderName|Cardholder's Name:|]
但是,任何包含$
字符的字符串都会失败。它与字符串完全不匹配。这些根本不匹配:
[NumberOfPersonsForRoomOut| x $2889 =| ]
[NumberOfPersonsForRoomOut| x \$2889 =| ]
[RoomSubtotalOut|\$|]
我已经在使用Regex测试仪进行了尝试。我做错了什么
以上结果在使用PHP5.5.22和PCRE库版本8.34 2013-12-15的服务器上
然而,我在其他几台服务器上试用了它,一切都如我所期望的那样匹配!其他服务器是PHP5.5.38/PCRE 8.38和PHP5.5.15/PCRE 8.34。问题似乎不是PCRE的版本。在特定服务器上,还有什么可能导致这种行为?
preg\u match\u all('/\[([^\]\\\\\\\\\\\\]+)([^\]\\\\\\\\\\\\\\]*)\\]/',“[RoomSubtotalOut\$\\\\\\\\\\\\\\\\\+],$m,preg\u SET\u顺序);echo$m[0][3]代码>输出\$
。因此,$
包含在匹配数组中。不清楚您所说的“它失败”是什么意思。@RuslanOsmanov在我的服务器上,您给出的示例没有任何输出。@RuslanOsmanov所说的“它失败”,我的意思是它与任何字符串都不匹配:echo$m[0][0]代码>不输出任何内容。@RuslanOsmanov我在另一台服务器上尝试了这个方法,效果很好。您使用的是哪个版本的PCRE?PHP版本5.6和7.1。PCRE库版本为8.39。顺便说一句,preg\u match\u all('/\[([^\]\\\\\\\\\\\\\\\\]+)([^\]\\\\\\\\\\\\\\]*)\\\\?([^\]\\\\\\\\\\\\\\\\\\\\\\\\]/',“[RoomSubtotalOut\\\\\\\\\\\\\\\\\\\\\\\\+],$m,preg\u设置顺序);echo$m[0][3]代码>输出\$
。因此,$
包含在匹配数组中。不清楚您所说的“它失败”是什么意思。@RuslanOsmanov在我的服务器上,您给出的示例没有任何输出。@RuslanOsmanov所说的“它失败”,我的意思是它与任何字符串都不匹配:echo$m[0][0]代码>不输出任何内容。@RuslanOsmanov我在另一台服务器上尝试了这个方法,效果很好。您使用的是哪个版本的PCRE?PHP版本5.6和7.1。PCRE库版本为8.39。顺便说一句,代码在和上捕获$
。