正则表达式编译错误

3
我正在寻找一个正则表达式,它可以删除路径开头的 x。接受的路径分隔符包括 \/.。路径也可以以其中一个分隔符开头,但不一定要这样。根据 regexpal 的测试结果,该正则表达式是有效的,但 PHP 报错如下:
Compilation failed: missing terminating ] for character class at offset 24

这里是正则表达式:

/^([\/\.\\]?)X([\/\.\\]{1})/i

这个正则表达式有什么问题?

你能在脚本中加入使用正则表达式的那一行吗? 第一反应:在你的正则表达式周围使用单引号'而不是双引号",否则PHP会删除为PCRE而转义的字符。 - Michel Feldheim
为了转义一个反斜杠,你需要使用3或4个反斜杠 \\ - HamZa
1
\\] 替换为 \\\\]。在 PHP 中转义反斜杠有点棘手。 - Sverri M. Olsen
@SverriM.Olsen 不仅限于 PHP :p - HamZa
2个回答

4

您正在转义末尾的]

相反,您可以使用preg_quote(),它在正则表达式语法中的每个字符前面加上反斜杠

此外,如果.在字符类中,则无需转义。


很酷,我不知道那个函数 - 当涉及到为 PCRE 转义转义字符时,它将节省很多混乱 :) - Michel Feldheim

0

这将替换所有紧跟在非字母或非数字字符后面的 x。

$result = preg_replace('/(?<=\W)x/', '', $subject);


不幸的是,那不是我正在寻找的。 - Le_Morri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接