正则表达式可以在两个不同的web评估器中使用,但不能在代码中使用


Regular Expression works in 2 different web-evaluators but not in code

我目前正在一个论坛上工作,希望使用正则表达式在帖子中查找表并将其转换为BB代码。我用了一个网络评估器(http://regexr.com)并计算出一个正则表达式。

/^('[table']'s*)^((?:[^'|'r'n]+['|'n])+)^('['/table'])$/m

它用于检测以下形式的表格:

[table]
abc|def|gih
123|456|789
[/table]

但是,当我通过POST和<textarea>将此文本传输到我的脚本时,使用带有该模式的preg_match_allvar_dump,结果我只得到空数组。从逻辑上讲,替换函数也不起作用。

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的,它也很完美。

编辑:添加代码样本

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

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

如果您想继续使用类似regexr的网站,请尝试regex101.com。编写完正则表达式后,您可以单击Tools > code generator,它将向您显示可在PHP中使用的代码。