2

次の文字列から文字列を取得したいRegex

Regex regex = new Regex(".signature=(.*)(", RegexOptions.Singleline);
var v = regex.Match(html);
string funcName = v.Groups[1].Value;

これはHTML文字列です:

c&&(b.signature=hj(c));

を取得したいのですが、hj実行すると次のようになりますexception

parsing ".signature=(.*)(" - Not enough )'s.
4

1 に答える 1

6

特殊文字をエスケープする必要があります。これを使って:

Regex regex = new Regex(@"\.signature=(.*)\(", RegexOptions.Singleline);
var v = regex.Match(html);
string funcName = v.Result("$1");

ここで、正規表現での特殊文字のエスケープに関する非常に良い説明を見つけることができます (2 番目の段落): http://www.regular-expressions.info/characters.html

編集:

HTMLページ全体でこの特定の関数を検索すると、問題が発生します。.*これは貪欲であり、可能な限り取得しようとすることを意味します(これについては、ここで良い説明を参照してください:http://www.regular -expressions.info/repeat.html (第 3 段落))

より良い方法は次のとおりです。

Regex regex = new Regex(@"\.signature=([^\(]+)\(", RegexOptions.Singleline);
var v = regex.Match(html);
string funcName = v.Result("$1");

[^\(]+.を含まない 1 文字以上の文字列を検索します(。それはhtmlページ全体で機能します

于 2013-08-06T13:51:02.060 に答える