2017-11-28 2 views
0

のように私は、URLを含む文字列の一致を確認したい:私は、URLを一致させるために、この正規表現(.NETスタイルを)持っているURLに一致するようにこの正規表現を変更するにはどうすればよいですか?

http://www.something.com 

www.something.com 

something.com 

((http|ftp|https|www)://)?(\w+?\.\w+)+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)? 

それは3つのURL上記のために働きますそれは必要がありますが、残念ながらそれはまた、これを一致します。

35.000 

それは35.000と一致しないように、私は、正規表現を解決することができますか?

+1

文字を含まない一致を除外するだけで、.NETでテキストを抽出するのは簡単です。 –

+0

あなたは '(http | ftp | https | www)'を '(https?ftp | www)'に変更することができ、あなたの長いリストは全ての文字をエスケープする必要はなく、代わりに '\ w'を使うことができます代わりに '[\ w〜!@#$%^&*()= + \\\ /?。:; '、 - ]'を使用して、「a-zA- – ctwheels

+0

URL構文は非常に複雑です。 1つのパターンですべての仕事をやろうとするのは、2つの理由から良い考えではありません.1)可能なすべてのケースを処理する究極のパターンを書くと、読みにくく、遅くなります。 2)単純なパターンを書くと、URLが見つからず、URLではない部分文字列と一致します。結論として、妥協案を選んでください:単純で非常に寛大なパターン+結果をフィルタリングするビルドインのURLチェッカー。 –

答えて

0

URLにマッチし、プロトコル、ホスト、パス、クエリ、およびフラグメントをグループ1,2,3,4、および5にそれぞれ配置する、本当に便利な正規表現です。また、ホスト部分のIPアドレスとホスト名の両方に一致します。ホストを除くすべてはオプションです。あなたが見ることができるように

(?:(https?|ftp)://)?(\d{1,3}(?:\.\d{1,3}){3}|(?:\w+\.)*[a-z]+)(/[^?#\s]*)(\?[^#\s]*)?(#[^\s]*)? 

、それは非常に寛大です。実際にURLの部分(エンコーディングなど)を検証することなく、全体の構造をチェックするだけです。しかし、正しいURLにマッチするので、十分なはずです。 Javascriptを使用している場合は/のスラッシュをエスケープするだけで正常に動作します。

お試しくださいhere

+0

www.example.comで試してみると、一致。 – brinch

関連する問題