我正在编写一个正则表达式,用于识别字符串中的命令。我有三个可能的命令可以开始,它们总是以分号结尾。
我相信正则表达式应该是这样的:
(command1|command2|command3).+;
我发现问题是,由于.
匹配任何字符而+
告诉它匹配一个或多个字符,它会跳过分号的第一个实例并继续运行
有没有办法让它在它遇到的分号的第一个实例停止?我应该使用除.
以外的其他内容吗?
答案 0 :(得分:5)
您面临的问题是:(command1|command2|command3).+;
是+
是贪婪的,这意味着它将匹配所有内容直到最后一个值。
要解决此问题,您需要将其设为非贪婪,为此,您需要添加?
运算符,如下所示:(command1|command2|command3).+?;
正如一个FYI,同样适用于*
运营商。添加?
会使其变得非贪婪。
答案 1 :(得分:3)
告诉它只找到非分号。
[^;]+
答案 2 :(得分:1)
您正在寻找的是非贪婪匹配。
.+?
贪婪的"?"
量词之后的+
会使其尽可能少地匹配 ,而不是默认情况下尽可能多地匹配
你的正则表达式是
'(command1|command2|command3).+?;'