正则表达式:如何匹配三引号但不是双引号

时间:2009-09-29 21:01:27

标签: regex string double quotes

我需要检查一下是否包含多个单词/字母/等的字符串,只包含一组三重双引号(即“”“),但也可以包含单引号(”)和双精度-quotes(“”),使用正则表达式。到目前为止没有取得多大成功。

5 个答案:

答案 0 :(得分:1)

尝试使用出现次数运算符来恰好匹配三个双引号。

  • \“{3}
  • [“] {3}
  • [\“] {3}

我很快使用http://www.regextester.com/进行了检查,似乎工作正常。

如何以您选择的语言正确编译正则表达式可能会有所不同!

答案 1 :(得分:0)

取决于您的语言,但您只需要匹配三个双引号(例如/\"{3}/),然后计算匹配项以查看是否只有一个。

答案 2 :(得分:0)

可能有很多方法可以做到这一点,但一个简单的方法是只查找多次出现的三引号然后反转正则表达式。以下是Perl的一个例子:

use strict;
use warnings;

my $match = 'hello """ hello "" hello';
my $no_match = 'hello """ hello """ hello';
my $regex = '[\"]{3}.*?[\"]{3}';

if ($match !~ /$regex/) {
    print "Matched as it should!\n";
}
if ($no_match !~ /$regex/) {
    print "You shouldn't see this!\n";
}

哪个输出:

Matched as it should!

基本上,你告诉它找到你不想要的东西,然后反驳真相。希望有道理。如果您需要帮助,可以帮助您将示例转换为另一种语言。

答案 3 :(得分:0)

具有负向前瞻的正则表达式可以做到:

(?!.*"{3}.*"{3}).*"{3}.*

我尝试使用这些java代码:

String good = "hello \"\"\" hello \"\" hello ";
String bad = "hello \"\"\" hello \"\"\" hello ";
String regex = "(?!.*\"{3}.*\"{3}).*\"{3}.*";
System.out.println( good.matches( regex ) );
System.out.println( bad.matches( regex ) );

...带输出:

true
false

答案 4 :(得分:0)

这可能是您的一个好开始。

^(\"([^\"\n\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*\"|'([^'\n\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*'|\"\"\"((?!\"\"\")[^\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*\"\"\")$

regex101.com上查看它的运行情况。