如何转义 preg_match 模式中的斜杠字符? [复制]

Posted

技术标签:

【中文标题】如何转义 preg_match 模式中的斜杠字符? [复制]【英文标题】:How to escape a slash character in the preg_match pattern? [duplicate] 【发布时间】:2014-10-05 11:22:15 【问题描述】:

我有这样的文字:

line 1/1/1/2

行词后面的文字是函数的参数,比如我调用extractData('1/1/1/2' , 'The main text')的时候:

function extractData($line, $text)

    $pattern = "/line(\s+)$line/";
    if(preg_match($pattern, $text)) 
        // some code
    


如何转义模式中的斜线字符? 换句话说,我应该如何编写模式? ($pattern = "/line(\s+)$line/";)

【问题讨论】:

【参考方案1】:

\Q and \E 也可用于忽略模式中的正则表达式元字符。

$pattern = '~line(\s+)\Q' . $line . '\E~';

【讨论】:

很高兴知道!这里还有一些新东西 :) 没有找到太多关于它的 documentation,但似乎是 to work。 @Jonny5 perldoc, regex-info【参考方案2】:

你可以使用preg_quote函数:

$pattern = '/line(\s+)' . preg_quote($line, '/') . '/';

【讨论】:

警告:preg_match(): Unknown modifier '1' in .... 当我回显模式时,它将是:/line(\s+)1/1/1/1/跨度> @DiariB 查看 hsz 提供链接的preg_quote 的文档。 @DiariB 抱歉,我已经编辑了答案 - 缺少分隔符。 @hsz 这是一个神奇的功能,谢谢:) @DiariB 不客气。【参考方案3】:

要转义你使用\的任何字符,所以要转义/你使用\/

如果要转义\,需要转义为\\\

【讨论】:

斜线在变量中,不能添加任何字符 然后使用hsz提到的preg_quote函数

以上是关于如何转义 preg_match 模式中的斜杠字符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何转义 NSPredicate 格式字符串中的尾部反斜杠

jquery 冒号转义 为啥双斜杠

转义字符串中的反斜杠?

python 中的反斜杠匹配的问题

如何使用单个反斜杠转义字符串的特殊字符

sed命令反斜杠的转义