如何使用正则表达式匹配表达式的最后一个单词但不匹配可选的最后一个单词?

时间:2015-08-04 20:24:42

标签: regex

说我有这个正则表达式:

(?:begin\s+)?(\S+)(?:\s+\S+)*\s+(\S+)(?:\s+end)?

(可选开头,一个单词,一组任意单词,一个单词,可选结尾,全部用空格分隔)

这个表达:

开始test1 test2 test3 end

我想使用括号来匹配此表达式中的“test1”和“test3”。无论单词“begin”是否在表达式中,“test1”匹配成功,因为“begin”是可选的。但是,“test3”仅在“end”不存在时匹配(如果“end”在那里,“end”匹配),即使“end”以相同方式变为可选。如何改变这一点,以便我可以忽略“结束”这个词,如果它在那里?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用此正则表达式:

(?:begin\s+)?(\S+)(?:\s+\S+)*?\s+(\S+)(?:\s+end)?$

DEMO

但要注意事实,它使用/gm模式