2016-08-05 3 views
1

Я разбираю файл robots.txt.Как преобразовать PHP-строку в PHP Regex

Disallow: /?hl=*&*$ 

И преобразование строки str_replace.

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

И результат

/?hl=*&*$ 

И я хочу привести

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

я найти решение этой проблемы. pls help me

ответ

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:

простой st-путь для указания строки должен заключить ее в одинарные кавычки (символ ').

Чтобы указать буквенную одиночную кавычку, сбегите с нее с помощью обратного слэша (\). Чтобы указать буквальную обратную косую черту, удвойте ее (\\). Все остальные экземпляры обратной косой черты будут рассматриваться как буквальная обратная косая черта: это означает, что другие управляющие последовательности, к которым вы могли бы привыкнуть, например \r или \n, будут выводиться буквально, как указано, а не иметь какое-либо особое значение.

Else, вы можете использовать двойные обратные слэши в doubel кавычках буквального (demo):

$my_regex = str_replace(array("?", "*", "/"), array("\\?", "(.*)", "\\/"), "/?hl=*&*$"); 
Смежные вопросы