2014-10-19 2 views
0

На MUD я играю, описания комнат в манеже могут начинаться во многих вариантах. Я пытаюсь написать регулярное выражение, где он только фиксирует описание комнаты моба, а не любые возможные начальные флаги. Это то, что я до сих пор:Совершенствование шаблона регулярного выражения

^\((?:[ACDGHIXRSTUW()]+|\s?\(Angry\))\)?\s?(.*)$ 

Он работает, по большей части, пока толпа не не имеет стартовый флаг. Вот пример того, что я говорю о относительно вариациях:

(H) (Angry) A mob is here. 
(A)(W)(R) A mob is also here. 
Another mob is here. 

Вот только три различных способа может появиться толпа. По существу, каждая буква в области диапазона может быть флагом, окруженным(). На однобуквенных флажках между пробелами и рядом не существует пробелов. Однако есть пробел до (Angry), за исключением случаев, когда он ведет.

Моя проблема заключается в том, что он не захватывает последнюю моб и не захватывает «(Злой)» в первой толпе. По-моему, я хорошо разбираюсь в регулярном выражении, но я не вижу, что я делаю неправильно, и это даже не самый эффективный способ справиться с этим.

Редактировать: Если это было непонятно, я просто хочу захватить все после последнего) или с самого начала, если флаги отсутствуют.

ответ

2

Это работает?

^(?:.*\))?(.*) 
+0

было бы лучше, если ваша команда '^ (?:. * \)) (?. *) ' –

+0

На самом деле, я изначально пошел с ответом hwnd, но нашел версию Avinash Raj (с небольшой модификацией), чтобы работать лучше! Еще раз спасибо! – Josh

+0

@AvinashRaj хорошо пункт. Благодарю. –

1

Вы можете использовать следующее регулярное выражение.

^(?>.*\))?\s*(.*) 
+0

Твоя работала, ей не казалось, что новая строка $ останавливает ее, поэтому она перешла в следующую строку. Не уверен, что вызвало это, но это действительно помогло мне и для будущего регулярного выражения! – Josh

+0

Хм не знаю, почему, http://regex101.com/r/mR5uM3/2 – hwnd

1

или использовать этот шаблон
\s*([^)]+$) или нескольких входных линий \s*([^)\r\n]+$)
Demo

\s*      whitespace (0 or more times) 
(      group capture 
    [^)]+     any character except: ')' (1 or more times) 
    $      before an optional \n, and the end of the string 
)      end of group