Что не так с этим RegEx?

Я написал это RegEx: '/\[\.{2}([^\.].+)\]/'

И это должно соответствовать шаблонам, как это: [..Class,Method,Parameter]

Это работает, пока у меня нет шаблона, подобного этому: [..Class1,Method1,Para1][..Class2,Method2,Para2]

Я пытался сделать RegEx ленивым, поставив ? вот +, '/\[\.{2}([^\.].+?)\]/' но это не помогло Какие-либо предложения?

0

Решение

Я считаю, что вы хотели использовать [^\.]+ скорее, чем [\.].+, Обратите внимание, что .+ является жадно определенным точечным рисунком и соответствует любой 1 или более символов, отличных от символов разрыва строки, и, таким образом, совпадают по обоим ] а также [,

Подберите любой 1 или более символов, кроме ] с [^]] вместо того, чтобы использовать [^\.]:

\[\.{2}([^]]+)]

Увидеть это регулярное выражение демо

подробности

  • \[ — а [ голец
  • \.{2} — две точечные буквы
  • ([^]]+) — Группа 1: один или несколько символов, кроме ] (не нужно убегать ] когда это первый символ в классе персонажей)
  • ] — закрывающая скобка (не нужно убегать ] когда он находится вне класса персонажа).

PHP демо:

$str = '[..Class,Method,Parameter]  [..Class1,Method1,Para1][..Class2,Method2,Para2]';
preg_match_all('/\[\.{2}([^\.].+?)\]/', $str, $matches);
print_r($matches[0]);

Результаты:

Array
(
[0] => [..Class,Method,Parameter]
[1] => [..Class1,Method1,Para1]
[2] => [..Class2,Method2,Para2]
)
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]