【问题标题】:RegEx for matching and excluding ' and "用于匹配和排除 ' 和 " 的正则表达式
【发布时间】:2019-09-26 15:54:48
【问题描述】:

我知道要否定 ' 这样的字符,我可以写成 [^']

但我想捕获任何字符(重复零次或多次),但该字符不应该是单引号或双引号:

"[^'""]*"

这是正确的语法吗?

【问题讨论】:

  • 外双引号是什么?为什么字符类中有两个双引号?是 C# 吗?
  • 我在 MySQL regexp 中编写了 regexp。如果我将正则表达式包含在 " " 中,那么如果用作正则表达式的一部分,我需要添加 ""

标签: regex regex-negation regex-group regex-greedy


【解决方案1】:

This expression 可能会帮助您这样做:

([^"'])*

您可能还想使用:

([^\x22\x27])*

您可以将其简化为表达式,可能是similar to,以便在捕获组中捕获除 '" 之外的所有其他内容:

([^\x27\x22]*) 

图表

此图表显示了表达式的工作原理,您可以在此 link 中可视化其他表达式:

JavaScript 测试

const regex = /([^\x27|\x22])*/gm;
const str = `anything else9*F&(A*&Fa09s7f'"'''"afa'"adfadsf`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

【讨论】:

  • 两个版本的表达式都是“正确的”。管道与无管道是“狡辩”。就个人而言,我有时 LIKE 会看到不是严格“必需”的管道 - 它通常可以帮助使正则表达式更具可读性。尽管如此 - Peel 女士对一个有效的问题给出了很好的回答。
  • @paulsm4 添加管道并没有错,只有在negated character class中才会匹配不上。 (顺便说一句,downvote 不是我的)
  • ([^"'])* 这会排除" 和` '` 吗?或者只是"
  • 我有疑问。我试过link,它匹配整个字符串。这是我的正则表达式:\b.*([^"'])*.*\b 这是我的字符串:ab"cde 虽然我有一个 " 它仍然匹配整个字符串?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 2017-07-29
相关资源
最近更新 更多