正则表达式适用于2个不同的Web评估程序,但不适用于代码

时间:2016-04-03 01:28:25

标签: php regex preg-match-all

我目前正在论坛上工作,希望使用正则表达式在帖子中查找表格并将其转换为BB-Code。我使用了网络评估器(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的one,它也能很好地工作。

修改:添加了代码示例

1 个答案:

答案 0 :(得分:0)

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

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

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