假设我有以下字符串:
这是一个考验 测试。这只是一个测试。结束。
我要选择this is a test
和this is only a test
。我需要做什么?
我试过的以下正则表达式产生了一个愚蠢的结果:
this(.*)test
(我也想捕捉它之间的内容)
返回this is a test for the sake of testing. this is only a test
这似乎很容易让我忘记了。
答案 0 :(得分:26)
正则表达式是贪婪的,这意味着它将捕获尽可能多的字符,这些字符属于.*
匹配。为了使它不贪婪尝试:
this(.*?)test
?
修饰符会使其在匹配中捕获尽可能少的字符。
答案 1 :(得分:8)
Andy E和Ipsquiggle有正确的想法,但我想指出你可能想要添加一个单词边界断言,这意味着你不想处理其中包含“this”或“test”的单词 - 只有自己的话。在Perl和类似的“\ b”标记。
实际上,this(.*?)test
会匹配“蓟是最伟大的”,你可能不想要它。
您想要的模式是这样的:\bthis\b(.*?)\btest\b
答案 2 :(得分:3)
*
是一个贪婪的量词。这意味着它尽可能匹配,即你所看到的。根据正则表达式的特定语言支持,您需要找到一个非贪婪的量词。通常这是一个尾随问号,如下所示:*?
。这意味着一旦正则表达式的其余部分得到满足,它就会停止使用字母。
答案 3 :(得分:1)
对我来说,只需删除/ g工作。