2

次の正規表現があります。

http://([^:]*):?([0-9]*)(/.*)

それを と照合するとhttp://brandonhsiao.com/essays/showers.html、かっこがグラブ:http://brandonhsiao.com/essays/showers.html. どうすればそれをつかむことができhttp://brandonhsiao.comます/essays/showers.htmlか?

4

3 に答える 3

3

最初の * の後にクエスチョン マークを付けます。現在、ホスト名を一致させるためのコードは、最後の まですべてを取得しています/

http://([^:]*?):?([0-9]*)(/.*)

しかし、それは私が推奨するものでもありません。代わりにこれを試してください:

(http://[^\s/]+)([^\s?#]*)

$1持つべきでありhttp://brandonhsiao.com、持つ$2べきで/essays/showers.htmlあり、ハッシュまたはクエリ文字列は無視されます。

これは、URL を検証するためのものではなく、URL をパスの前の部分とパス自体に分割するためのものであることに注意してください。たとえば、ホスト名の一部として無効な文字を喜んで受け入れます。ただし、パスの有無にかかわらず URL に対しては正常に機能します。

PS Lisp でこれを使って何をしているのか正確にはわかりません。そのため、他の PCRE 互換環境でのみテストする自由を取りました。通常、私は回答が使用される正確なコンテキストで回答をテストします。

$_ = "http://brandonhsiao.com/essays/showers.html";
m|(http://[^\s/]+)([^\s?#]*)|;
print "1 = '$1' and 2 = '$2'\n";

# [j@5 ~]$ perl test2.pl
# 1 = 'http://brandonhsiao.com' and 2 = '/essays/showers.html'
于 2013-08-02T04:09:33.520 に答える
0
http://([^/:]*):?([0-9]*)(/.*)

最初のグループはすべてに一致しますが:、今は を追加/しました。これは、[^]演算子がすべてに一致することを意味するためですが、グループ内にあるものはすべて同じです。

それが役に立ったことを願っています!

于 2013-08-02T04:09:24.847 に答える
0

http:\/\/([^:]*?)(\/.*)

*?は、最初のスラッシュ (.com の直後のスラッシュ) に対する非貪欲な一致です。

マッチ グループについては、 http://rubular.com/r/VmU2ghAX0kを参照してください。

于 2013-08-02T04:21:00.503 に答える