Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 正则表达式在两个不同的web计算器中工作,但不在代码中工作_Php_Regex_Preg Match All - Fatal编程技术网

Php 正则表达式在两个不同的web计算器中工作,但不在代码中工作

Php 正则表达式在两个不同的web计算器中工作,但不在代码中工作,php,regex,preg-match-all,Php,Regex,Preg Match All,我目前正在一个论坛上工作,希望使用正则表达式在帖子中查找表,并将它们转换为BB代码。我使用了一个web计算器()并计算出一个正则表达式 /^(\[table\]\s*)^((?:[^\|\r\n]+[\|\n])+)^(\[\/table\])$/m 它用于检测以下表单的表: [table] abc|def|gih 123|456|789 [/table] 但是,当我通过POST和将此文本传输到脚本时,使用该模式对其使用preg\u match\u all,并且var\u dump结果我只得

我目前正在一个论坛上工作,希望使用正则表达式在帖子中查找表,并将它们转换为BB代码。我使用了一个web计算器()并计算出一个正则表达式

/^(\[table\]\s*)^((?:[^\|\r\n]+[\|\n])+)^(\[\/table\])$/m
它用于检测以下表单的表:

[table]
abc|def|gih
123|456|789
[/table]
但是,当我通过POST和
将此文本传输到脚本时,使用该模式对其使用
preg\u match\u all
,并且
var\u dump
结果我只得到空数组。从逻辑上讲,replace函数也不起作用

preg_match_all("/^(\[table\]\s*)^((?:[^\|\r\n]+[\|\n])+)^(\[\/table\])$/m", $_POST['test_string'], $tmp);
var_dump($tmp);
这个输出

array(4) { [0]=> array(0) { } [1]=> array(0) { } [2]=> array(0) { } [3]=> array(0) { } }
PS:我知道regexr.com是基于JS的,所以我尝试了一个基于php的系统,它也可以完美地工作


编辑:添加了Codesample

您需要转义正则表达式的反斜杠,以便在PHP字符串中使用:

$pattern = "/^(\\[table\\]\\s*)^((?:[^\\|\\r\\n]+[\\|\\n])+)^(\\[\\/table\\])$/m";

如果你想继续使用像regexr这样的网站,试试吧。在编写正则表达式之后,您可以单击
Tools>code generator
,它将显示可以在PHP中使用的代码。

您可以发布一些代码吗?据我所知,任何语言都需要在字符串中转义特殊字符。因此,首先尝试用“\\”替换“\”。例如“\n”表示“新行”,而“\\”表示单反斜杠。看起来不错,但现在的问题是,只有在php脚本中使用字符串直接定义变量时,这才有效。当我在通过POST和textarea传递给脚本的字符串上尝试它时,它不再起作用(可能因为什么原因没有检测到换行符)<[表]abc(表)abc(表)abc(表)abc(表)abc(表)abc(8)bebec(表)abc(表)abc(表)abc(表)be[1][1]=>字符串(8)串(8)7)7)7)7 7.7 7 7 7 7 7 7 7)以下以下[表:“[表][1][1][1][1][1]=>字符串(8)表[8)表]表[表[1][表][表][表][表][表][表][1][1][1][1][1][1][1][1][1][1][1][1][表]1][表]1][表]1]1]1 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7]串(8 8)串(8)串(8“1在脚本中,2在后期编辑:工作,但我首先必须在新行上分解输入,修剪它,然后用换行符作为胶水将其内爆回来。看起来输入中有尾随空格。您的正则表达式模式相对严格。我宁愿修复正则表达式,也不愿使用explode/trim/infrade来解决它。也许可以尝试在最后一个
[\/table\]
之后添加一个
\s*
。我做到了。谢谢