Поймать слово, встречающееся в кавычках несколько раз - PullRequest
1 голос
/ 19 апреля 2019

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

Я собираюсь использовать шаблон с php preg_replace_callback ()

['"].*([a-zA-Z0-9-_]*elementor[a-zA-Z0-9-_]*).*['"]

Текст, который я тестирую,

$backgroundVideoContainer.addClass('elementor-edit new-elementor-invisible class-new');
$backgroundVideoContainer.addClass('elementor-loading elementor-invisible');
$backgroundVideoContainer.addClass('media noelementor');

Демо можно найти на https://regex101.com/r/ykVhYy/3

С вышеприведенным шаблоном он поймает следующее:

Совпадение 1: невидимый элемент

Совпадение 2: невидимый элемент

Матч 3: elementor

Ожидаемые результаты должны быть следующими:

Текстовая строка 1: elementor-edit, new-elementor-invisible

Текстовая строка 2: загрузка элементов, невидимость элементов

Текстовая строка 3: нет совпадения

1 Ответ

2 голосов
/ 19 апреля 2019

Вы можете использовать это регулярное выражение в PHP, используя директиву \G:

(?:'|(?!^)\G)\h*(?:([\w-]*\belementor\b[\w-]*)|[\w-]+)\b(?=[\w\h-]*')

RegEx Demo

  • \G устанавливает позицию в конце предыдущего совпадения или в начале строки для первого совпадения
  • (?=[\w\h-]*') - положительный взгляд на то, что мы утверждаем, что у нас впереди заключительная одинарная кавычка после 0 или более слов, пробелов или дефисов.

Обратите внимание, что ваши совпадения доступны в захваченной группе № 1.

Код PHP:

$re = '/(?:'|(?!^)\G)\h*(?:([\w-]*\belementor\b[\w-]*)|[\w-]+)\b(?=[\w\h-]*')/m';
$str = '$backgroundVideoContainer.addClass(\'elementor-edit new-elementor-invisible class-new\');
$backgroundVideoContainer.addClass(\'elementor-loading elementor-invisible\');
$backgroundVideoContainer.addClass(\'media noelementor\');';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the match result from group #1
print_r($matches[1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...