1

私は正規表現を作成するのが初めてなので、これはばかげた見落としかもしれませんが、(URL の一致を目的とした) 私の正規表現は機能していません。私の目標は、次のような任意の URL と一致させることでした。

http://www.somewhere.com
somewhere.com
https://ww3.some_where-hi.com
www.goop.go/herp/derp.lol

私が作成した正規表現は以下のとおりですが、のような URL とは一致しません。http://t.co/GZhtBh6c番号 6 で一致を停止します ( www.regexpal.comで決定)。

((http|https)://)?([a-z0-9]+\.)?[a-z0-9\-_]+.[a-z]+(/[a-z0-9\-_]*)*([a-z0-9\-_]*\.[a-z]+){0,1}

これが機能しない理由を誰かに教えてもらえますか? また、これが最善の解決策ではないと確信しています。このためのよりエレガントな正規表現がある場合は、ぜひご覧ください。

PS この正規表現は JavaScript で使用されます。

4

2 に答える 2

4

文字列がRFC3986で指定されているURLを保持しているかどうかを検証します。絶対URLと相対URLの両方がサポートされています。

これは、提供するサンプルなどと一致します。また、URLのさまざまな部分を抽出することもできます

^
(# 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\-._~%!$&'()*+,;=:@/?]*)?
$

javascriptではこれは次のようになります

if (/^([a-z][a-z0-9+\-.]*:(\/\/([a-z0-9\-._~%!$&'()*+,;=]+@)?([a-z0-9\-._~%]+|\[[a-f0-9:.]+\]|\[v[a-f0-9][a-z0-9\-._~%!$&'()*+,;=:]+\])(:[0-9]+)?(\/[a-z0-9\-._~%!$&'()*+,;=:@]+)*\/?|(\/?[a-z0-9\-._~%!$&'()*+,;=:@]+(\/[a-z0-9\-._~%!$&'()*+,;=:@]+)*\/?)?)|([a-z0-9\-._~%!$&'()*+,;=@]+(\/[a-z0-9\-._~%!$&'()*+,;=:@]+)*\/?|(\/[a-z0-9\-._~%!$&'()*+,;=:@]+)+\/?))(\?[a-z0-9\-._~%!$&'()*+,;=:@\/?]*)?(#[a-z0-9\-._~%!$&'()*+,;=:@\/?]*)?$/im.test(subject)) {
    // Successful match
} else {
    // Match attempt failed
}
于 2012-06-01T22:15:09.270 に答える
-1

[A-z]小文字の代わりに使用すると、小文字のみが一致し[a-z] ます。a-z

于 2012-06-01T22:13:22.863 に答える