我需要将以下三个内容捕获到一个怪物的变量中,由一串文字表示,我正在一个正则表达式中播放:
示例,接下来是我想要的名称/健康/进攻匹配:
示例1:[暴徒]水晶乔[受伤]攻击你!
示例2:[mob] Crystal Joe。
示例3:[mob] Crystal Joe [划伤]。
例4:[暴徒]乔攻击你!
示例5:[暴徒]一条巨型红龙攻击你!
例6:[暴徒]一条巨型红龙(闪闪发光)[垂死]攻击你!
我不是正规表达专家,老实说也不是很精通。我创建了以下表达式:
\[mob\]\s([\w\s]*)(\[\w+\]\s?)?(attacking you)?
当所有三个都存在时,上述似乎都有效,但是当健康状况(即“[划痕]”缺失时,名称与名称和“攻击你!”同名作为名称(即“Joe攻击你! “这不是我想要的。请注意,上面的表达式并不试图用括号做实例6。
感谢您提供的任何帮助。
答案 0 :(得分:1)
你没有逃避方括号。试一试:
\[mob\]\s((?:(?!attacking you)[\w\s()])*)(?:\[(\w+)\]\s?)?(attacking you)?
请参阅demo here(将鼠标放在线条上以查看每个组匹配的内容)。
我做了什么:
[
和]
; ()
),但添加了?:
,因此它们不会是匹配的组。(?!attacking you)
来防止怪物名称“吞噬”该表达。