0

ここで見つけた正規表現を変更して、さまざまな英国および第 2 レベルの TLD を受け入れるようにしました。

/\b((?:^https?:\/\/|^[a-z0-9.\-]+[.][a-z]{2,4})(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!@()\[\]{};:'".,<>?]))/i

ただし、こちらのテスト データでわかるように、正規表現は無効なwww.zapple.@comやなどの URL に一致しますhttps://m!crosoft.com

何らかの理由@で、記号は の前に除外されます.comが、 の後には除外され.ません。

私が見る限り、ピリオドの前には文字、数字、およびダッシュのみが許可されているため、感嘆符はまったく除外されません。

4

1 に答える 1

2

@ は

[^\s()<>]+

そしてその !マーク

(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+

わかりませんが、それは URL に一致する適切な正規表現ではないようです

RFC 3986 に従った URL に一致する以下を試してください。絶対 URL と相対 URL の両方がサポートされています。

大文字と小文字を区別しないように true に設定します

^
(# Scheme
 [a-z][a-z0-9+\-.]*:
 (# Authority & path
  //
  ([a-z0-9\-._~%!$&'()*+,;=]+@)?              # User
  ([a-z0-9\-._~%]+                            # Named host
  |\[[a-f0-9:.]+\]                            # IPv6 host
  |\[v[a-f0-9][a-z0-9\-._~%!$&'()*+,;=:]+\])  # IPvFuture host
  (:[0-9]+)?                                  # Port
  (/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/?          # Path
 |# Path without authority
  (/?[a-z0-9\-._~%!$&'()*+,;=:@]+(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/?)?
 )
|# Relative URL (no scheme or authority)
 ([a-z0-9\-._~%!$&'()*+,;=@]+(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/?  # Relative path
 |(/[a-z0-9\-._~%!$&'()*+,;=:@]+)+/?)                            # Absolute path
)
# Query
(\?[a-z0-9\-._~%!$&'()*+,;=:@/?]*)?
# Fragment
(\#[a-z0-9\-._~%!$&'()*+,;=:@/?]*)?
$

更新 1

これは m!crosoft.com および @pple.com と一致しません。おそらく Rublar との何らかの関係によるものです。

ここに画像の説明を入力

于 2012-06-09T00:17:10.770 に答える