2017-01-12 5 views
-1

Этот код:PHP preg_match_all не соответствует сбежавший цитату

<?php 
    $string = "\"single quote"; 
    preg_match_all("/\"/im", $string, $m); 
    $all_quotes = count($m); 
    preg_match_all("/\\\"/im", $string, $m); 
    $escaped_quotes = count($m); 

    echo "<pre>"; 
    echo "<b>string:</b> $string<br>"; 
    echo "<b>all quotes:</b> $all_quotes<br>"; 
    echo "<b>escaped quotes:</b> $escaped_quotes<br>"; 
    echo "</pre>"; 
?> 

должен соответствовать все кавычки, то матч все ускользает кавычки, и эхо результатов. По какой-то причине для строки "single quote она перекликается как с одной цитатой, так и с одной экранированной цитатой, однако шаблон /\\\"/im ничего не соответствует при выполнении в http://regexr.com с той же строкой.

+0

Параметр '«\»" 'не содержит обратную косую черту Проверьте [эту демонстрацию, чтобы увидеть, как. объявить обратную косую черту в строковом литерале PHP] (http://ideone.com/c2In3Z). –

+0

Возможный дубликат [Правильный способ избежать обратного слэша \ [\ \] в PHP регулярное выражение?] (http://stackoverflow.com/questions/11044136/right-way-to-escape-backslash-in-php-regex) – 4castle

ответ

0

Отредактировано:

Итак, в первую очередь, вы получаете счет от preg_match_all в качестве возвращаемого значения. То, как вы сейчас это делаете, всегда будет показывать вам 1, потому что preg_match_all возвращает массив (с одним элементом в вашем случае).

Как указано Wiktor Stribiżew, вам нужно настроить регулярное выражение слишком

preg_match_all("/\\\\\"/im", $string, $m); 

я не на 100% уверен, что я понимаю ваш вопрос, но я постараюсь ответить на него.

Возможно, вы ожидаете увидеть \" в своей переменной $string, верно?

Но это не тот случай. PHP сохранит эту обратную косую черту перед сохранением вашей строки. Это всего лишь намек на PHP, что вы хотите получить литерал " и что вы не пытаетесь завершить строку здесь.

В случае, если вы хотите (по любой причине) получить \", вы должны использовать такой код:

$string = "\\\"single quote"; 
+0

Нет, строка $ отлично, и она должна быть «одиночной цитатой» –

+0

@WearyAdventurer, так что вы ожидаете от этого кода? Должен ли он показывать одну цитату и нулевую кавычку? –

+0

Да, 1 цитата и 0 экранированные кавычки. –

Смежные вопросы