Perl RegEx: возвращение одного совпадения вложенной "или" подгруппы - PullRequest
0 голосов
/ 26 апреля 2018

Скажите, что у меня есть текст

The quick brown fox jumps (over) the lazy dog.Затем я хочу, чтобы мой шаблон RegEx возвращал, скажем, слово hello (отсутствует в тексте) или любое слово в скобках, в данном случае over.Таким образом, шаблон в виде:

/((hello)|(\([^\)]+\)))/

Однако я хочу, чтобы он возвращал один совпадение для этого.Это имело бы смысл только в том случае, если бы оно было приоритетным.То есть:

  • Если hello находится в этой строке, тогда $1 должно быть hello.
  • Если hello отсутствует в тексте, вернуть все, что естьв скобках, если вы можете найти его.

Так что в

The quick brown fox jumps (over) the lazy dog 

$1 должна содержать строку over.И в

hello! The quick brown fox jumps (over) the lazy dog

* $1 должна содержать строку hello.

https://regex101.com/r/H5bwKs/2

Есть ли способ сделать это в одном выражении?

1 Ответ

0 голосов
/ 26 апреля 2018

Используйте ответвление сброса конструируйте вместе с жадными точками.Вопросы заказа:

^(?|.*(hello)|.*(\([^)]+\)))

Демонстрационная версия

...