2016-08-05 55 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)中使用雙反斜線

相關問題