RegEx 用于查找单词之间只有一个空格的单词

标签 regex perl grep

我需要有关 RegEx 问题的帮助:

我想找到两个已知单词(例如“foo”和“bar”)的出现,它们之间有任何空格而不是完全一个空格字符。

在我必须 grep 的文本中,两个单词之间可能有空格、制表符、CR、LF 或它们的任意组合。

在正则表达式中:
我需要一个匹配 "foo[ \t\n\r]+bar" 的正则表达式但不匹配 "foo bar" .

到目前为止我尝试过的所有东西要么错过了一些组合,要么也匹配了唯一不匹配的单空格案例。

在此先感谢您提供任何解决方案。

编辑:为了澄清,我在这里使用 Perl 兼容的 RegEx。

最佳答案

您还可以使用负前瞻:

foo(?! \b)\s+bar

如果不支持前瞻,您可以明确地编写它:
foo(?:[^\S ]| \s)\s*bar

表达式 [^\S ]包括双重否定,它的工作原理可能不是很明显。如果你计算出逻辑,它意味着除了空格之外的任何空格。

关于RegEx 用于查找单词之间只有一个空格的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3456954/

相关文章:

Javascript 正则表达式循环所有匹配项

perl - 如何让 Perl 匹配带有 Windows EOL 字符的文件中的\r

shell - 在日志文件中搜索 - 退出代码

Python 正则表达式

sql - PostgreSQL 字符串搜索部分模式删除无关字符

Perl XML/SVG 解析器无法找到节点

perl - 如何实时跨平台将 perl 代码输出到 STDOUT/STDERR 和文件?

Ruby 相当于 grep -v

linux - Grep 以特定字符开头的所有字符串实例

c# - 如何不匹配双空格?