2016-08-05 122 views
1

我正在解析robots.txt。如何将PHP字符串转换为PHP正则表达式

Disallow: /?hl=*&*$ 

并转换str_replace字符串。

$my_regex = str_replace(array("?", "*", "/"), array("\?", "(.*)", "\/"), "/?hl=*&*$"); 
echo $my_regex; 

,并导致

/?hl=*&*$ 

而且我想导致

\/\?hl=(.*)&(.*)$ 

我找到这个问题的解决方案。请帮助我

回答

1

似乎从PHP 5.1.1开始,双引号字符串中的反斜杠也应该打印出来,所以即使您的代码也适用于较新版本的PHP(source)。

可替换地,可以考虑使用单引号字符串文字与'\?''\/'使得反斜杠被视为文字,而不是一个转义序列的一部分(或者甚至'\\?''\\/'):

$my_regex = str_replace(array("?", "*", "/"), array('\?', "(.*)", '\/'), "/?hl=*&*$"); 
// $my_regex = str_replace(array("?", "*", "/"), array('\\?', "(.*)", '\\/'), "/?hl=*&*$"); 
echo $my_regex; 

PHP demo

this PHP single-quoted string literal reference

简单指定一个字符串的方式是用单引号括起来(字符')。

要指定文字单引号,请使用反斜线(\)将其转义。 要指定文字反斜杠,请将其加倍(\\所有其他反斜杠实例将被视为文字反斜杠:这意味着您可能会习惯的其他转义序列(如\r\n)将按照指定的字面输出,而不是具有任何特殊含义。

$my_regex = str_replace(array("?", "*", "/"), array("\\?", "(.*)", "\\/"), "/?hl=*&*$"); 

否则,您可以在doubel引号字符串字面(demo)中使用双反斜线

相关问题