Почему регулярное выражение не соответствует кавычкам? - PullRequest
0 голосов
/ 02 октября 2019

В моем содержании сообщений WordPress у меня есть строка [yu_TOC title="Short Stories"]. Я пытаюсь сопоставить его с

preg_match('/\[yu_TOC title=\"(.*?)\"\s*\]/', $content[0], $matchedTitle);

. Я распечатал строку, которую хотел сопоставить, используя error_log(substr($content, 0, 1000));.

Выход (соответствующая его часть): [yu_TOC title=&#8221;Short Stories&#8221;]</p>

Ожидается ли, что кавычки изменились с " на &#8221;?

Почему нетмой шаблон соответствует линии, которая должна соответствовать?

Как это исправить?

Обновление: я пытался заменить [] на {}, но проблема остается той же.

1 Ответ

1 голос
/ 02 октября 2019

Если эти кавычки изменились, и вы также хотите соответствовать закодированной версии, вы можете использовать чередование , чтобы сопоставить любое из них в группе захвата, а затем использовать обратную ссылку \1 для того же совпадения, что и сопутствующее закрывающее совпадение.

Ваше значение находится во второй группе захвата, поскольку первая группа используется для обратной ссылки.

\[yu_TOC title=("|&#8221;)(.*?)\1\s*\]

Regex demo | Php demo

Обратите внимание , что вам не нужно бежать "

Например

$content = ["[yu_TOC title=&#8221;Short Stories&#8221;]</p>"];
preg_match('/\[yu_TOC title=("|&#8221;)(.*?)\1\s*\]/', $content[0], $matchedTitle);
print_r($matchedTitle);

Выход

Array
(
    [0] => [yu_TOC title=&#8221;Short Stories&#8221;]
    [1] => &#8221;
    [2] => Short Stories
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...