Regex線による線どのように合わせトリプルクォートなダブルクォート

StackOverflow https://stackoverflow.com/questions/1494929

  •  18-09-2019
  •  | 
  •  

質問

私はチェックをする必要が文字列の多くの言葉-文等を含み1セットのトリプルダブルクォート(""")でも含まれているシングル-ダブル-引用符(")をダブルダブルクォート("")を用い、regex.なか成功することができました。

役に立ちましたか?

解決

否定先読みで正規表現はそれを行うことができます:

(?!.*"{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

他のヒント

使ってみる発行数のオペレータに一致し台ます。

  • \"{3}
  • ["]{3}
  • [\"]{3}

私は早くチェック http://www.regextester.com/, いるように思いますよー。

使い方が正しくコンパイルの正規表現に言語の選択になった場合は、ちょっと素敵でした。

あなたの言語に依存しますが、3つのしか二重引用符(例えば、/\"{3}/)のために一致して、正確に一つがあるかどうかを確認するためにマッチをカウントする必要があるはずです。

があり、おそらくこれを行うための方法はたくさんありますが、簡単なものは、単にその後、正規表現を反転トリプル引用符の複数の発生を探すことです。ここでは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!

基本的に、あなたは真実を反転、あなたはしたくないものを見つけるためにそれを言っています。それは理にかなって願っています。ヘルプが必要な場合は、あなたが他の言語に例を変換することができます。

これはあなたのために良いスタートかもしれません。

^(\"([^\"\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 のでアクションでそれを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top