替换全部中的正则表达式

本文关键字:正则表达式 全部 替换 | 更新日期: 2023-09-27 18:32:39

我需要一个正则表达式,可以搜索未括在单引号或双引号中的特定子字符串。如果我需要在下面的文本中搜索"查询"的示例

这是一个非常好的查询,但是我们不需要这个"引号中的错误查询",也不需要这个"单查询引号"。我需要的是可以解决我的问题的完美查询表达式。

然后我应该得到所需的结果作为>查询,即在好词和查询表达式之前

替换全部中的正则表达式

这个问题很难用正则表达式解决。这可能看起来很简单,您可以选择像您到目前为止创建的正则表达式,考虑到引用之前可能还有其他文本(如果您的正则表达式引擎支持可变宽度环视(:

 (?<!"[^"])query(?![^"]*")|(?<!'[^'])query(?![^']*')

但是对于以下文本,它将失败:

这是一段"引用的文本",它进行查询,尤其是当人们"也"遵循它时

由于"后面看"将检测引用文本的结束引号,作为"查询"一词的可能引号的一部分。

当单词 Query 位于两段缩写文本之间时,也会出现类似的问题:

当您不知道数据时,很难知道查询何时不返回任何值。

如果您使用的是 C#,则可以使用平衡组的概念,但由于您不是,并且 Javascript 不支持该构造,因此您最终会遇到这样一种情况:如果不使用比正则表达式更高级的技术,就很难满足搜索条件。

通过大量调整,您可能能够检测到大多数情况,但万无一失的解决方案将是不可能的。特别是当仅限于Javascript支持的正则表达式功能时。具有可变长度环顾并支持平衡组或递归的正则表达式引擎使您可以更接近,请参阅本文以获取匹配开始和结束引号的示例。

@"
(?>
    "'b (?<DEPTH> )
    |
    'b" (?<-DEPTH> )
    |
    [^"]*
)*
(?(DEPTH)(?!))
"

尽管对于其他有趣的情况,这仍然会失败,例如

在某些情况下,双引号字符 ("( 在查询中的错误位置使用,例如:"从"表"中选择测试