より良いタイトルが見つかりませんでしたが、以下のサンプルからリンクを抽出するには正規表現が必要です。
snip... flashvars.image_url = 'http://domain.com/test.jpg' ..snip
正規表現が最良の方法であると仮定します。
ありがとう
より良いタイトルが見つかりませんでしたが、以下のサンプルからリンクを抽出するには正規表現が必要です。
snip... flashvars.image_url = 'http://domain.com/test.jpg' ..snip
正規表現が最良の方法であると仮定します。
ありがとう
次のサンプルコードを検討してください。提供された文字列からどのように抽出するかを示しています。しかし、私は文字列をいくつか拡張しました。一般に、。*の使用は包括的すぎます(以下の例が示すように)。
重要な点は、あなたが求めていることを行うにはいくつかの方法があるということです。最初の答えは「ルックアラウンド」を使用し、2番目の答えは「グループ」アプローチを提案します。選択は主に実際のデータに依存します。
string[] tests = {
@"snip... flashvars.image_url = 'http://domain.com/test.jpg' ..snip",
@"snip... flashvars.image_url = 'http://domain.com/test.jpg' flashvars2.image_url = 'http://someother.domain.com/test.jpg'",
};
string[] patterns = {
@"(?<==\s')[^']*(?=')",
@"=\s*'(.*)'",
@"=\s*'([^']*)'",
};
foreach (string pattern in patterns)
{
Console.WriteLine();
foreach (string test in tests)
foreach (Match m in Regex.Matches(test, pattern))
{
if (m.Groups.Count > 1)
Console.WriteLine("{0}", m.Groups[1].Value);
else
Console.WriteLine("{0}", m.Value);
}
}
編集:編集した質問に一致する新しい正規表現:
引用符の間にあるものを一致させる必要があります=
よね?
@"(?<==\s*')[^']*(?=')"
する必要があります。
(?<==\s*')
現在の位置の直前に=
、オプションで空白が続き、その後にが続くことを表明します(ポジティブルックビハインド)。'
[^']*
任意の数の非'
文字に一致します。
(?=')
次の前に一致が停止することを表明し'
ます。
この正規表現は、これらの引用符の中に実際にURLがあるかどうかをチェックしません。それをしたい場合は、
@"(?<==\s*')(?=(?:https?|ftp|mailto)\b)[^']*(?=')"
このための単純な正規表現はです@"=\s*'(.*)'"
。