Что не так с этим регулярным выражением PHP? - PullRequest
2 голосов
/ 10 сентября 2008
$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output);

Я пытаюсь заменить все алфавитные символы, за которыми следуют один или несколько пробельных символов (табуляции и / или пробелы), за которыми следуют один или несколько числовых символов, за которыми следуют точка с запятой с алфавитным символом, за которым следует запятая, за которой следуют цифры а затем точка с запятой.

Я приведу пример:

Начало:

hello world      1007;

Конец:

hello world,1007;

Ответы [ 3 ]

6 голосов
/ 10 сентября 2008

Два | в начале и конце, вероятно, неверны - и оба должны быть косыми чертами.

Все остальные слэши должны быть обратными (и должны быть экранированы).

А так как PHP 4.04 $n является предпочтительным способом ссылки на группу захвата.

$output = preg_replace("/(\\D)\\s+(\\d+;)/", "$1,$2", $output);

Если вы используете одинарные кавычки, вам не нужно избегать обратной косой черты:

$output = preg_replace('/(\D)\s+(\d+;)/', '$1,$2', $output);
3 голосов
/ 10 сентября 2008

Должны ли эти косые черты быть обратными? Вам также нужно будет избегать их для PHP, если вы не измените свои двойные кавычки на одинарные.

1 голос
/ 10 сентября 2008

Вы хотите использовать обратную косую черту в регулярном выражении, а не прямую косую черту. Начальная и конечная трубы необходимы (или другой разделитель для регулярного выражения)

$x = "hello world      1007;";    
echo preg_replace('|(\D)(\s+)(\d+)(;)|','$1,$3',$x);
echo preg_replace('/(\D)(\s+)(\d+)(;)/','$1,$3',$x);
echo preg_replace('{(\D)(\s+)(\d+)(;)}','$1,$3',$x);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...