特定のクラスを持つ要素を見つけるために正規表現を作成しようとしています。
例えば
<span class = "float">
私がこれを思いついたのは:
\s*class\s*=\s*('|")\s*float\s*('|")\s*
もちろん、複数の CSS を宣言することもできます
<span class = "float align cssnames">
他のすべてをオプションにする方法がわかりません。
多分\s*class\s*=\s*('|")[\w\s]*\bfloat\b[\w\s]*('|")\s*
?
引用符の間に、両側に単語の境界があり、さらに単語の文字やスペース(つまり、他のCSSクラス)で囲まれている可能性がありfloat
ます。
このコードは、一致しないアンカーとしてclass="と"を検索します。次に、見つかった各属性値を取得し、それぞれを割り当てと呼ばれる名前付きキャプチャグループに配置します。
次に、linqはcapture(s)という名前のアイテムだけを抽出し、キャプチャされたグループから単一の「Float」アイテムを探して、trueまたはfalseを返します。
string data = @"<span class = ""float align cssnames"">";
string pattern = @"(?:class\s*=\s*\x22)((?<Assignments>[^\s\x22]+)(?:\s?))+(?:\x22)";
var containsFloat =
Regex.Matches(data, pattern, RegexOptions.Multiline)
.OfType<Match>()
.Select(mt => mt.Groups["Assignments"].Captures
.OfType<Capture>()
.Select(c => c.Value))
.SelectMany(assignments => assignments) // is an IEnumerable<string> = { "float", "align", "cssnames" } at this point
.Any(assignment => assignment == "float"); // True!
Regex rgx = new Regex("\"float.*\"");
"float anything here but end with the close quote "に一致します