有没有一个PHP函数可以在应用正则表达式之前转义正则表达式模式?
有没有一个PHP函数可以在应用正则表达式之前转义正则表达式模式?
有没有一个PHP函数可以转义正则表达式模式,以防止它们在另一个正则表达式模式中使用时被应用?
我正在寻找类似于C#的Regex.Escape()
函数的东西。
有一个PHP函数可以在应用正则表达式模式之前对其进行转义吗?
问题的原因是:用户想要了解是否有一个PHP函数可以在应用正则表达式模式之前对其进行转义。这可能是因为用户有一个运行时字符串需要在某个文本中匹配,并且该字符串可能包含特殊的正则表达式字符。用户想要找到一个函数来转义这些特殊字符,以确保它们被视为普通字符而不是正则表达式的一部分。
解决方法是使用PHP的preg_quote()函数。这个函数接受一个字符串作为参数,并在每个属于正则表达式语法的字符前面加上一个反斜杠。这对于在文本中匹配需要的运行时字符串并且该字符串可能包含特殊的正则表达式字符是非常有用的。
这个函数的参数是输入字符串和可选的分隔符。如果指定了可选的分隔符,它也会被转义。这对于转义PCRE函数所需的分隔符非常有用。斜杠(/)是最常用的分隔符。
需要注意的是,如果没有指定$delimiter参数,用于包围正则表达式的分隔符(通常是斜杠/)将不会被转义。通常,您需要将正则表达式的分隔符作为$delimiter参数传递。
下面是一个使用preg_match函数在空格中查找给定URL出现的示例:
$url = 'http://stackoverflow.com/questions?sort=newest'; $escapedUrl = preg_quote($url, '/'); $regex = '/\s' . $escapedUrl . '\s/'; $haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla"; preg_match($regex, $haystack, $matches); var_dump($matches);
此示例使用preg_quote函数转义URL中的特殊字符,并使用转义后的URL构建了一个正则表达式。然后,使用正则表达式在给定的字符串(haystack)中查找匹配项,并将匹配的结果存储在$matches数组中。
总结起来,使用preg_quote函数可以在应用正则表达式模式之前对其进行转义。这对于需要在运行时构建正则表达式并确保其中的特殊字符被视为普通字符的情况非常有用。只需将需要转义的字符串和可选的分隔符传递给preg_quote函数即可。
文章标题:PHP函数能否转义正则表达式模式?
问是否有一种PHP函数可以在应用正则表达式模式之前转义它们,为了解决这个问题,我们可以使用T-Regx库中的“准备好的模式”。
$url = 'http://stackoverflow.com/questions?sort=newest'; $pattern = Pattern::inject('\s@\s', [$url]); // ↑ $url is quoted
然后执行正常的匹配操作:
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla"; $matcher = pattern->match($haystack); foreach ($matcher as $match) { }
甚至可以与`preg_match()`一起使用:
preg_match($pattern, 'foo', $matches);
那么为什么要使用另一个库,难道标准的PHP无法完成这个任务吗?
实际上,标准的PHP并不能解决所有情况。比如字符串`"\\"`如果是最后一个字符,就会导致错误。
我在一天之内看到了你回答的第二个答案中提到这个库,我现在意识到这是因为这是你自己的库。Stack Overflow的政策要求在推荐自己的工具时清楚地说明任何关联。对于我在4年前创建这个库后不久发表的答案,我当时年轻而愚蠢,请接受我的道歉。