1

現在、URL を抽出するための正規表現に問題があります。

正規表現で次のような URL を取得したい:

http://stackoverflow.com/questions/ask
https://stackoverflow.com
http://local:1000
https://local:1000

いくつかのチュートリアルを通じて、この正規表現が上記のすべてを検出することを学びました。^(http|https)\://.*$ただし、http://local:1000;http://invalid http://khttp://まったく取得できない場合でも、単一の文字列として取得されます。

私の表現はこれを除外するように書かれていないことは理解していますが、私の問題は、それを書く方法を考えられないため、このシナリオをチェックすることです。

どんな助けでも大歓迎です!

編集:

私の問題を見ると、最初の http:// または https:// の後に「//」が文字列に含まれていないことを確認するチェックを実装できる限り、問題を解決できるようです。実装方法は?

申し訳ありませんが、これはJavaで行われます

また、次の制約を追加する必要があります:http://local:80/test:90ポートの重複のために失敗するなどの文字列...別名、有効な文字列(http/sの後に1つ)と1つの合計で2つの記号のみを許可する制約が必要です。港前。

4

3 に答える 3

1

プログラミング言語を調べて、パーサーが既にあるかどうかを確認してください。たとえば、php には parse_url() があります

于 2013-01-28T19:22:15.740 に答える
1

://これは、文字列に最初に出現した後にない場合にのみ一致します。

^https?:\/\/(?!.*:\/\/)\S+

文字列内から有効な URL を解析しようとするのは非常に複雑であることに注意してください
。完全な URL 検証の正規表現を求めて を参照してください。
プロトコルとそれに続くスペース以外の文字にのみ一致します。

Javaで

Pattern reg = Pattern.compile("^https?:\\/\\/(?!.*:\\/\\/)\\S+");
Matcher m = reg.matcher("http://somesite.com"); 
if (m.find()) {
    System.out.println(m.group());
} else {
    System.out.println("No match");
}
于 2013-01-28T19:25:22.523 に答える
0

http://net.tutsplus.com/tutorials/other/8-regular-expressions-you-should-know/から

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

これは、プログラミング言語/ツールに基づいて変更される場合があります

于 2013-01-28T19:27:36.357 に答える