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

Я не эксперт по Regex и пытался найти решение, но я действительно не могу найти его. это своего рода основной вопрос регулярных выражений. надеюсь, вы могли бы помочь мне

рассмотреть это как строку

    $ret_value = ($norm_string_value == 'true' ? true : false);

    $line = trim($line);
                if (strlen($line)==0 || $line[0]==';' || $line[0] == '#') {
                    continue;
                } 
    $foobar = hello_world($foo) == 'bar'

Я использую IDE Netbeans и ищу фрагмент кода с помощью функции поиска ..

мое ожидаемое совпадение будет:

    $norm_string_value == '
    $line[0]==';'
    $line[0] == '
    hello_world($foo) == '

мое текущее регулярное выражение выглядит так [$].*? == ', и в результате я получаю в результате:

    $ret_value = ($norm_string_value == '
    $line)==0 || $line[0]==';' || $line[0] == '
    $foobar = hello_world($foo) == '

вы видите, что у меня естьпроблема с этим символом доллара и этим hello_world ..- я не знаю, как включить это в мое регулярное выражение

Ответы [ 2 ]

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

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

(?:\w+\()?\$[^$\r\n]*\h*==\h*'(?:;')?

По частям

  • (?:\w+\()? По выбору соответствует 1+ словам, за которыми следует (
  • \$ Совпадение `$ ~
  • [^$\r\n]* Совпадение 0+ раз с любым символом, кроме $ или новой строки
  • \h*==\h* Соответствие == в окружении 0+ горизонтальных пробельных символов
  • '(?:;')? При желании совпадение ;'

Regex demo

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

Спасибо за все комментарии! Я нашел ответ:

(?:\w+\()?\$[^$\r\n]* == \h*'(?:;')?

это своего рода измененная версия Ответа Четвертой Птицы

(?:\w+\()?\$[^$\r\n]*={2,3}\h*'(?:;')?

просто добавил немного места, удалил {2,3} и сделал его ==вместо

на самом деле реальная цель этого состоит в том, чтобы сделать условие моего кода равным === вместо ==, а одинарная кавычка убеждает меня в том, что левая пара является строкой, поэтому мне нужно привести к ней (string).

Ответ Radagast81 был «ПОЧТИ», что мне было нужно, и я предпочитаю его больше, чем «Четвертая птица», так как он был намного проще / короче. попытался изменить его, но я не могу заставить его работать

\S*[$][^$]*==\s*'

один из моих совпавших образцов:

($norm_string_value == '

, и мне не нужно, чтобы в скобках было указано. просто:

$norm_string_value == '

Спасибо всем!

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