所以我有这个可以在 regex101.com 上运行的正则表达式
(?:[^\#\\S\\+]*)
它与第一个#第二个中的第一个匹配。
每当我尝试将正则表达式与 PHP 的 preg_replace 一起使用时,我都不会得到预期的结果。
到目前为止,我通过 preg_quote() 尝试过:
\(\?\:\[\^\\#\\S\\\+\]\*\)
并尝试用 4 个\转义原始\\:
\(\?\:\[\^\\#\\\\S\\\\\+\]\*\)
仍然没有成功。我做错了什么根本性的错误吗?
我只是使用:
preg_replace("/$regex/", "", $string);
我所有其他不需要这么多转义字符的正则表达式都可以这样完美地工作。
最佳答案
当您在 PHP 的 preg_match
中使用 (?:[^\#\\S\\+]*)
时,无论是在单引号字符串还是双引号字符串中字面量, \\S
被解析为非空白模式。 [^\S]
等于 \s
,即它匹配空格。
preg_quote()
函数仅用于使任何字符串成为正则表达式的文字字符串,它只是转义所有作为特殊正则表达式元字符/运算符的字符(例如 (
, )
, [
, 等等),因此你不应该在这里使用它。
虽然您可以使用正则表达式从字符串开头匹配除空格和#
之外的1个以上字符,例如preg_match('~^[^#\s]+~', $s, $match)
,您只需使用 #
分解
输入字符串即可获得第 0 个项目。
关于php - PHP 中的正则表达式转义转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43312161/