PHP регулярное выражение не соответствует. Онлайн-отладчики находят совпадения - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь сопоставить любую строку в файле, имеющую следующий шаблон: '/ (! C # [0-9] +) + /', что означает "! C #" плюс любое число. У меня есть строка «Это должно закрыться! C # 10», с которой я пытаюсь соответствовать. Регулярное выражение не совпадает. Я нахожусь на PHP 7.3.10

Онлайн-инструменты PCRE, кажется, говорят, что они должны совпадать. Однако когда я запускаю код на локальном сервере XAMPP, он не совпадает. Не работает fgets.

while (!feof($file)) {
    $pattern = '/(!c#[0-9]+)+/';
    $line = fgets($file);
    preg_match_all($pattern, $line, $matches);
    var_dump($matches);
}

В этом случае файл выглядит так:

This should close !c#10

Я ожидаю, что $ match будет содержать строку '! C # 10'

Возвращает "массив (2) {[0] => массив (0) {} [1] => массив (0) {}}"

1 Ответ

0 голосов
/ 10 ноября 2019

Проблема была в кодировке моего файла.

Файл был закодирован как "Юникод UTF-16 с прямым порядком байтов".

Я повторно получил как "ACSII" ишаблон начал совпадать.

Я не уверен, почему оригинальная кодировка не совпадает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...