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);
OR演算子|
を使用して、3つのケースを個別に指定します。
('[^'"]*')|("[^'"]*")|([^'"]*)
使用している正規表現の方言に応じて、OR演算子で区切られた一致しないグループと、単語の一致するグループを定義する必要があります[^'"]*
。
'name=asdf' の後に何があるかわからなくても、その空白を想定するか
、末尾を区切るものを何も想定しません。
name=
(?:
(['"])((?:(?!\1).)*)\1 # (1,2)
| (\S*) # (3)
)
答えは $3 で $2 です