2017-06-19 2 views
0

私は基本的に発信URLマッチャーを作成しようとしています。そのため、HTMLを含むストリームをCDNを参照するように置き換えることができます。私は圧縮を使用しているのでIIS URL書き換えモジュールを使用できません。私は現在、特定のファイルタイプのIE用のサブフォルダに一致する正規表現正規表現と一致するURLはサブフォルダで

Regex ASSET_PATH = new Regex(@"(?i)assets/([A-Za-z0-9\-_/.]+)\.(jpg|jpeg|bmp|tiff|png|gif|js|css|mov|mp4|ogg|avi|mp3)", RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); 

これは素晴らしい作品と私​​はその時点から文字列には何も操作することができます(つまり、以降「資産/」からを持っています右 )。私が達成する必要があるのは、フォーマットを必ずしも知らなくても、 "assets /"サブフォルダの左にある文字列を操作することです。 CSS /インラインスタイルで

<img src="./assets/123/pig.jpg" /> 
<img src="http://mysite.blah/assets/123/pig.jpg" /> 
<img src="http://www.mysite.blah/assets/123/pig.jpg" /> 
<img src='assets/123/pig.jpg' /> 

:ここではいくつかの例であり、とにかく

background-image : URL('assets/123/pig.jpg') 
background-image : URL(http://www.mysite.blah/assets/123/pig.jpg) 

が、私はあなたが画像を取得すると思います。私は本質的に、URLの論理的な始点を見つけてそこから操作して自分のCDNを指すことができるまで、「資産」という言葉の「左」を見ることができるようにしたい。

enter image description here

私は、これは正規表現で可能であるか分からないので、正規表現/ C#/ HTML敏捷性パックの組み合わせを使用して、任意の提案は歓迎されている

+0

'RegexOptions.IgnoreCase'を2回書いています。それは何も解決しません、それはちょうどバグ私.. – Olian04

+0

私はあなたを理解するか分からない。 [this](https://regex101.com/r/IwHWCJ/1)のような意味ですか? – Olian04

+0

@ Olian04 - ちょうどタイプミス(RegexOptions.IgnoreCase)ですが、おそらく私はあなたをいつもバグに残すべきです... LOL :-) –

答えて

1

はあなたが後にしている何本か?

(?<BeforeAssets>.*?(?:\/|^))assets\/(?<AfterAssets>[A-Za-z0-9\-_\/.]+)\.(?<FileExtension>jpg|jpeg|bmp|tiff|png|gif|js|css|mov|mp4|ogg|avi|mp3)

あなたはここにこれを試してみることができます。http://regexstorm.net/tester または、ここに:https://regex101.com/r/b8XxcF/1

NB:上記の正規表現では、私は、スラッシュ文字をエスケープ。 .Netはこれを必要としませんが、文句を言っていません。そうすることで他のRegexエンジンと互換性があります。これはRegex101でテストできることを意味します。

あなたがそう^文字は、その行の先頭と一致しないので、assets/は、それに先立つ何も持っていない例を取得するためにMultiLineまたはSingleLineオプションを指定する必要がありますこれらのツールでテスト。このオプションは、コードでは必要ない場合があります。つまり、テキスト全体ではなく、一度に1つの文字列に一致する場合のみです。


更新誤読のため

謝罪。完全なHTMLページを解析しています。そのページから返されたURIだけではありません。これを行うには、のようなもの使用することができます

["'\(](?<BeforeAssets>[^"'\(\)]*?)assets\/(?<AfterAssets>[A-Za-z0-9\-_\/.]+)\.(?<FileExtension>jpg|jpeg|bmp|tiff|png|gif|js|css|mov|mp4|ogg|avi|mp3)

(ありがたい文字"'を、そして(はURLでは違法なので、変数の開始を検出するためにOKする必要があります:。https://tools.ietf.org/html/rfc3986#section-2.2)を

これは不正なものではありません。 HTML解析ツールを使用してURIを引き出す方が良いでしょう。正規表現ですべてをやっているなら、うまくいけば助けになるだろう。

+0

ジョンに感謝しますが、私はそれを働かせることができませんでした。私はregex101を使ってあなたの例をそこに叩いてテストしますが、何も一致しませんか?ソースとしてあなたは文字通り任意のWebページのソースを使用することができますし、画像リンクの1つを上の画像例に変更します –

+0

ああ、ごめんなさい。私はリンクからURIを抽出して、それを使っていると仮定しました。あなたは、HTMLコードのどこにでもリンクを見つける何かの後にいます。あなたは伝説です... – JohnLBevan

+1

あなたは伝説です! –

関連する問題