3

3 種類の入力すべてから何らかのテキストを取得しようとしていますが、引用符で囲まれていないケースを処理する方法がわかりません。

これまでのところ、私は持っています:

name=['"](.*?)['"]

入力:

name="sometext"
name='sometext'
name=sometext
4

3 に答える 3

4

あなたは 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);
于 2012-04-25T22:03:12.573 に答える
2

OR演算子|を使用して、3つのケースを個別に指定します。

('[^'"]*')|("[^'"]*")|([^'"]*)

使用している正規表現の方言に応じて、OR演算子で区切られた一致しないグループと、単語の一致するグループを定義する必要があります[^'"]*

于 2012-04-25T22:00:03.947 に答える
0

'name=asdf' の後に何があるかわからなくても、その空白を想定するか
、末尾を区切るものを何も想定しません。

name= 
(?:
     (['"])((?:(?!\1).)*)\1    # (1,2)
 |   (\S*)                     # (3)
)

答えは $3 で $2 です

于 2012-04-25T22:07:41.620 に答える