Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.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 为什么';我的正则表达式不匹配包含$character的文本吗?_Php_Regex_Preg Match All_Pcre - Fatal编程技术网

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。顺便说一句,代码在和上捕获
$