PHP中的正则表达式转义转义字符

时间:2017-04-09 21:31:32

标签: php regex

所以我有这个正则表达式适用于regex101.com

(?:[^\#\\S\\+]*)

它与第一个#second匹配。

每当我尝试将我的正则表达式用于PHP的preg_replace时,我都无法得到我期望的结果。

到目前为止,我通过preg_quote()尝试了它:

\(\?\:\[\^\\#\\S\\\+\]\*\)

尝试用原来的\\用4来逃避:

\(\?\:\[\^\\#\\\\S\\\\\+\]\*\)

仍然没有成功。我做的事情基本上是错误的吗?

我只是使用:

preg_replace("/$regex/", "", $string);

我不需要这么多逃避字符的所有其他正则表达式都是完美的。

1 个答案:

答案 0 :(得分:2)

当您在PHP的preg_match中使用\\S时,在单引号或双引号字符串文字中,[^\S]被解析为非空白模式。 \s等于preg_quote(),即它与空格匹配。

(函数仅用于使任何字符串成为正则表达式的文字字符串,它只是转义所有字符,这些字符是sepcial正则表达式元字符/运算符(如),{{1 }},[等),因此你不应该在这里使用它。

虽然您可以使用正则表达式来匹配除空格之外的1个字符以及preg_match('~^[^#\s]+~', $s, $match)之类的字符串开头的#,但您可以使用{explode输入字符串# 1}}并获得第0项。