正则表达式匹配精确模式但仅最后一次出现

时间:2014-10-24 12:22:59

标签: regex

我正在寻找一个解析以下字符串的正则表达式:

My Name Here(123456789) some_code[some_other_code]

格式相对简单:

  • 我的名字这是一个Steam名称(我认为这几乎可以是任何东西)。
  • 后面是括号之间的数字。名称和左括号之间没有空格。
  • 跟着一个空间。
  • 在这种情况下跟随代码名称(我认为不能包含空格)“some_code”。
  • 在这种情况下,在块括号“[some_other_code]”之间跟随另一个代码(可能再没有空格)。

我想抓住所有四个:

  • “我的名字在这里”
  • 123456789
  • some_code
  • some_other_code

以下正则表达式有效:

(.*?)\(([0-9]*)\) (.*?)\[(.*?)\]

问题在于,第一个“我的名字在这里”部分也可能包含我所知道的所有括号之间的数字......而不是“我的名字在这里”它可能是“尼克(123)(456)Abcd”。那不符合......

同样的正则表达式匹配:

Nick(123) (456) Abcd(123456789) some_code[some_other_code]

第一个捕获组现在只捕获“Nick”(虽然它应该捕获“Nick(123)(456)Abcd”)而第二组捕获123作为数字,而它应该捕获最后一次出现123456789。 / p>

换句话说,我只希望最后一次出现(([0-9] *))作为第二组而不是第一组......

我想我需要使用回顾或其他东西,但我不知道如何实现这个......任何想法?

1 个答案:

答案 0 :(得分:1)

只需删除第一个捕获组中存在的?量词。这样它就会捕获从开始greedily最长匹配)到最后(个括号的所有字符。

(.*)\(([0-9]*)\) (.*?)\[(.*?)\]

DEMO