完善正则表达式

时间:2014-10-19 00:39:06

标签: regex

在我玩的MUD上,暴徒房间描述可以从多种变化开始。我试图写一个正则表达式,它只捕获暴徒的房间描述,而不是任何可能的开始标志。这就是我到目前为止所做的:

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

在大多数情况下,它一直有效,直到暴徒没有起始标志。以下是我谈论变体的例子:

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

这只是暴徒出现的三种不同方式。基本上,范围部分中的每个字母都可以是一个由()包围的标志。在单字母标志上,之间没有空格和下一个(。但是,之前有一个空格(愤怒),除非它通过。

我的问题是,它没有抓住最后一批暴徒,它正在捕捉"(愤怒)"在第一个暴徒。我认为,我对正则表达式有一个很好的掌握,但我无法看到我做错了什么,甚至可能不是最有效的方法来处理它。

编辑:如果它不清楚,我只想捕获最后一个之后的所有内容,或者如果没有标记则从头开始捕获。

3 个答案:

答案 0 :(得分:2)

这有用吗?

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

答案 1 :(得分:1)

您可以使用以下正则表达式。

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

答案 2 :(得分: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