【发布时间】:2013-11-26 03:02:07
【问题描述】:
在我正在玩的游戏中,我需要用一个正则表达式将以下三件事从一个怪物中捕获到变量中,用一串文本表示:
- 怪物名称(始终存在。可能是一个或多个单词,并且可能包含括号)
- 健康(可选,如果有,请始终用括号 [] 括起来)
- 侵略(可选。总是显示为“攻击你!”如果存在)
示例,然后是我希望在每个下面的名称/健康/攻击匹配:
示例 1:[暴民] Crystal Joe [受伤] 攻击你!
- 姓名:水晶乔
- 健康:受伤
- 侵略:攻击你!
示例 2:[暴民] 水晶乔。
- 姓名:水晶乔
- 健康状况:(空白)
- 侵略:(空白)
示例 3:[暴民] Crystal Joe [划伤]。
- 姓名:水晶乔
- 健康:划伤
- 侵略:(空白)
示例 4:[暴民] 乔攻击你!
- 姓名:乔
- 健康状况:(空白)
- 侵略:攻击你!
示例 5:[mob] 一条巨大的红龙攻击你!
- 名称:一条巨大的红龙
- 健康状况:(空白)
- 侵略:攻击你!
示例 6:[暴民] 一条巨大的红龙(闪闪发光)[垂死]攻击你!
- 名称:一条巨大的红龙(闪闪发光)
- 健康:垂死
- 侵略:攻击你!
我不是正则表达式专家,老实说,我并不精通它。我创建了以下表达式:
\[mob\]\s([\w\s]*)(\[\w+\]\s?)?(attacking you)?
以上似乎在所有三个都存在时有效,但是当健康(即“[scratched]”缺少名称时,名称与名称和“攻击你!”作为名称匹配(即“乔攻击你! " 这不是我想要的。请注意,上面的表达式并没有尝试使用括号来执行示例 6。
感谢您提供的任何帮助。
【问题讨论】:
-
创建多个正则表达式,并运行它们而不仅仅是 1...这样您就不必使用多个
|以及不同的组名来破解贫民窟
标签: regex regex-negation regex-lookarounds regex-greedy