正则表达式 - 在换行符结束搜索

时间:2015-03-05 21:17:37

标签: regex

我正在使用Regex搜索文件并查找“夹在”其他两个字符串之间的字符串。这是我目前的代码:

openingstring.*?closingstring

我遇到的问题是它正在搜索文件中的多行。假设我想在“foo”和“bar”之间找到任何内容,我的文件看起来像这样:

foo this is NOT the string I want 
foo this is the string I want bar

我的正则表达式返回两行,当我想要它只返回第2行。

如何才能获得foobar位于同一行的字符串?

我还应该注意,这不是在文本编辑器中,也不是在编程语言中完成,而是在自动化软件的用户界面中完成。

4 个答案:

答案 0 :(得分:2)

""应该匹配除新行之外的任何字符,你使用哪种语言?

无论如何,你可以尝试这样的事情:

foo[^\r\n]*bar

请注意,您不需要"?"在哪里" *"本身意味着0或更多。

答案 1 :(得分:1)

如果.*?首先找到foo,那么.显然是贪婪的情况就是这样,它会直到它找到下一个栏。这只会发生,在这种情况下,如果点[^\r\n]*?表示Dot-All。你应该尝试关闭它。或者,如果您别无选择,请使用.*?代替Dot子句{{1}}

答案 2 :(得分:1)

为什么不使用内联修饰符?m

(?m)foo.*bar

或者,要覆盖Singleline模式,?m-s

(?m-s)foo.*bar

答案 3 :(得分:0)

正则表达式引擎将从“从左到右”处理字符串。

由于输入字符串以foo开头,因此引擎将在第一次尝试时开始匹配。 Nothing 告诉引擎它不应该与表达式foo的第二个.*?匹配 - 所以它会继续发现bar

foo .*?                                                         bar
foo this is NOT the string I want foo this is the string I want bar

完美匹配。

总是一个好主意排除打开关闭字符串,以便在模式中匹配,以实现最短的匹配:

模式foo((?!foo|bar).)*bar将匹配foobar 之间的任何内容,如果它既不包含foo也不包含bar

foo((?!foo|bar).)*bar

Regular expression visualization

Debuggex Demo