これはGoogleにとって素晴らしい質問です、ご存知のとおり...しかし、くちばしを濡らすためだけに:Matthew O'Riordanは、プロトコルの有無にかかわらず、mathcesがリンクするような正規表現を作成しました。
彼のブログ投稿へのリンクは次のとおりです
しかし、将来の参考のために、ここの投稿からの正規表現も提供しましょう:
/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)/
そして、ブログライターのマシュー自身によってうまく分解されたように:
(
( # brackets covering match for protocol (optional) and domain
([A-Za-z]{3,9}:(?:\/\/)?) # match protocol, allow in format http:// or mailto:
(?:[\-;:&=\+\$,\w]+@)? # allow something@ for email addresses
[A-Za-z0-9\.\-]+ # anything looking at all like a domain, non-unicode domains
| # or instead of above
(?:www\.|[\-;:&=\+\$,\w]+@) # starting with something@ or www.
[A-Za-z0-9\.\-]+ # anything looking at all like a domain
)
( # brackets covering match for path, query string and anchor
(?:\/[\+~%\/\.\w\-]*) # allow optional /path
?\??(?:[\-\+=&;%@\.\w]*) # allow optional query string starting with ?
#?(?:[\.\!\/\\\w]*) # allow optional anchor #anchor
)? # make URL suffix optional
)
あなたの特定の例はどうですか
しかし、URLドメインを作成する場合、ネガティブは[^\/:]
単純に次のようになります。
[-0-9a-zA-Z_.]
そして、それは//の後と最初の/の前のすべてに一致するはずです。しかし、URLがスラッシュで終わっていない場合はどうなりますか?その場合はどうしますか?
上位の正規表現(簡略化)は、負の文字セットと同じように1つの文字にのみ一致します。したがって、これは、使用している完全な正規表現のネガティブセットを置き換えるだけです。