preg_match - pattern - последнее слово в скобках - PullRequest
2 голосов
/ 15 июня 2011

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

! KEYWORD (\Foo \Bar \Ban \Baz) "/" "Hello"
! KEYWORD (\Foo \Bar \Baz) "/" "Hello"
! KEYWORD (\Foo \Baz) "/" "Hello"

Спасибо

1 Ответ

4 голосов
/ 15 июня 2011

Одна возможность будет

.*\W(\w+)\s*\)

Объяснение

.*     #1 runs to the end of the string
\W     #2 backtracks to a non-"word character"
(\w+)  #3 captures all following "word characters" into group 1
\s*    #4 optional white space
\)     #5 mandatory literal closing paren

Это регулярное выражение работает, потому что оно активно использует возвратный путь, чтобы найти "последнее вхождение чего-либо" встрока (т. е. шаг # 2 повторяется до тех пор, пока не совпадет остальная часть выражения - или все выражение не будет выполнено).

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

...