如何转义 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 模式中的斜杠字符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章