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

标签 php regex

所以我有这个可以在 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/

相关文章:

php - 如何从我的数据库中选择所有具有属于特定字符串一部分的值的行?

php - MySQL转换

java - 替换前两次出现的 '&' 字符之间的字符串

regex - 另外使用未初始化值 $1 - Perl

返回 boolean 值的 PHP 函数

javascript - 关于 php/javascript 中的日期选择器

php - 在 PHP 7 Ubuntu 14.04 上调用未定义函数 mb_strlen()

swift - 如何搜索在字符串的特定索引之前开始的正则表达式匹配?

java - 使用正则表达式检查字符串

java - 如何检查字符串是否包含包含空格的子字符串?