在我玩的MUD上,暴徒房间描述可以从多种变化开始。我试图写一个正则表达式,它只捕获暴徒的房间描述,而不是任何可能的开始标志。这就是我到目前为止所做的:
^\((?:[ACDGHIXRSTUW()]+|\s?\(Angry\))\)?\s?(.*)$
在大多数情况下,它一直有效,直到暴徒没有起始标志。以下是我谈论变体的例子:
(H) (Angry) A mob is here.
(A)(W)(R) A mob is also here.
Another mob is here.
这只是暴徒出现的三种不同方式。基本上,范围部分中的每个字母都可以是一个由()包围的标志。在单字母标志上,之间没有空格和下一个(。但是,之前有一个空格(愤怒),除非它通过。
我的问题是,它没有抓住最后一批暴徒,它正在捕捉"(愤怒)"在第一个暴徒。我认为,我对正则表达式有一个很好的掌握,但我无法看到我做错了什么,甚至可能不是最有效的方法来处理它。
编辑:如果它不清楚,我只想捕获最后一个之后的所有内容,或者如果没有标记则从头开始捕获。
答案 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