私は3つのタイプの入力からすべてを取得しようとしていますが、引用符で囲まれていない場合の処理方法を理解することはできません。二重引用符または一重引用符を一致させる方法または正規表現を引用符で囲まない方法はありますか?
これまでのところ、私が持っている:
name=['"](.*?)['"]
入力:
name="sometext"
name='sometext'
name=sometext
私は3つのタイプの入力からすべてを取得しようとしていますが、引用符で囲まれていない場合の処理方法を理解することはできません。二重引用符または一重引用符を一致させる方法または正規表現を引用符で囲まない方法はありますか?
これまでのところ、私が持っている:
name=['"](.*?)['"]
入力:
name="sometext"
name='sometext'
name=sometext
あなたはC#開発者のようですので、最初に一致するグループを使用して同じ引用符で閉じられるようにすることができます(したがってphrase="Don't forget apostrophes"
をサポートします)。
Regex regex1 = new Regex(@"=(?:(['""])(.*?)\1|.*)");
string text = @"
name=""don't forget me""
name='sometext'
name='sometext'
name=sometext
";
foreach (Match m in regex1.Matches(text))
Console.WriteLine (m.Groups[2].Value);
私はseparatly 3例を指定するには、OR演算子|
を使用します。
('[^'"]*')|("[^'"]*")|([^'"]*)
正規表現に応じて、使用している方言では、OR演算子で区切られた一致しないグループを定義する必要があります。単語[^'"]*
の一致するグループ。
「空自名=」の後に何ができるかを知ることがなければ、終わりを区切るその空白または何も
を前提としています。
name=
(?:
(['"])((?:(?!\1).)*)\1 # (1,2)
| (\S*) # (3)
)
回答(* '[^'] ')$ 3
でcatted $ 2 |( "[^'] * ")|([^ '"] *) – Uri