regex - 什么正则表达式 (PCRE) 会找到两个不包含特定单词的特定单词?
问题描述
我需要帮助提出一个 PCRE 正则表达式,该表达式将在多行文件中找到两个出现的单词,而它们之间没有某个单词。
下面的第一个例子应该匹配,因为“foo”出现了两次,它们之间没有单词“bar”,而第二个例子不应该匹配,因为“foo”出现了两次,它们之间有单词“bar”。
匹配示例:
foo
跳过
了
懒惰
的foo
不匹配示例:
foo
跳过酒吧foo
_
_
解决方案
您的问题可能以前曾被问过,尽管可能不完全相同。这里的一种方法是在 的出现之间进行匹配时使用回火点foo
,以确保我们不会bar
一路交叉。尝试在启用 dot all 模式的情况下运行以下正则表达式:
\bfoo\b((?!\bbar\b).)*?\bfoo\b
演示
以下是使用的正则表达式模式的解释:
\bfoo\b match an initial "foo"
((?!\bbar\b).)*? match any content, including across newlines, provided
that we do not pass "bar" along the way
\bfoo\b match a final "foo"
如果您没有可用的 dot all 模式,您可以使用类似的模式对其进行模拟:
\bfoo\b((?!\bbar\b)[\s\S])*?\bfoo\b
推荐阅读
- swift - implement "done" button in UIToolBar to close UIDatePicker and ToolBar
- c# - 面板到图像(DrawToBtimap 不起作用)
- angular - 无法读取未定义 Angular 的属性“ngbDateParserFormatter”
- mysql - How to update column data based on the select and update query
- c# - "The scope https://graph.microsoft.com/Calendars.Read is not valid" error while getting access token for my app
- python - 如何选择列名并将其用作 Python 中变量名的输入?
- c# - 获取正在访问 ASP.NET Core 应用程序的当前 Windows 用户
- apache-camel - Camel - 检查 body 是实体列表还是简单实体
- java - Spring Security 每次返回相同的令牌
- typescript - I am getting the FileTransferError error code 3 while uploading images to a server using ionic