1

正規表現を使用して URL を解析し、URL の特定のセクションを取得しようとしていますが、パターンが見つからない場合は何もしません。
URLの例は

/te/file/value/jifle?uil=testing-cdas-feaw:jilk:&jklfe=https://value-value.jifels/temp.html/topic?id=e997aad4-92e0-j30e-a3c8-jfkaliejs5#c452fds-634d-f424fds-cdsa&bf_action=jildape

太字のテキストを取得したいと思います。

現在、正規表現 " d=([^#]*)" を使用していますが、問題はこのパターンの URL にもまたがって実行されていることです: そして、その太字部分を取得しています

/te/file/value/jifle?uil=testing-cdas-feaw:jilk:&jklfe=https://value-value.jifels/temp.html/topic?id=e997aad4-92e0-j30e-a3c8-jfkaliejs5&bf_action=jildape

# が含まれていないため、この URL に一致しないことをお勧めします。

4

3 に答える 3

0
regex = "id=([\\w-])+?#"

これは、'id=' と '#' の間のすべての文字クラス [a-zA-Z_0-9-] を取得します (つまり、'&'そこにある場合、正規表現は失敗します)。

id=

-自明ですが、これは「id =」の完全一致を探します

([\\w-])

-これは、文字クラスを定義してグループ化します。\w はエスケープされた \w です。'\w' は、[a-zA-Z_0-9] に等しい Java の定義済み文字クラスです。あなたの例からの想定パターンのため、このクラスに「-」を追加しました。

+?

-これは、正規表現の可能な限り短い一致を探す、気が進まない量指定子です。

#

-正規表現の終わり、パターンに一致するために探している最後の文字。


「id=」とそれに続く最初の「#」の間のすべての文字を取得しようとしている場合、次のように動作し、上記と同じロジックを使用しますが、文字クラス[\\w-].に置き換えます。これは何にでも一致します。

regex = "id=(.+?)#"
于 2012-12-07T18:16:05.723 に答える
0

正規表現は、問題が文字列に関係しているという理由だけで常に使用すべき魔法のツールではありません。この場合、あなたの言語にはおそらく URL を分解するツールが備わっているでしょう。PHP では、これはparse_url(). Perl では、URI::URL モジュールです。

ほとんどの場合、このような一般的な問題に対しては、独自のソリューションを作成するよりも、十分にテストされた既存のソリューションを優先する必要があります。

于 2012-12-07T16:31:23.057 に答える
0

id パラメーターの値を一致させたいのですが、末尾に '#' 記号を含むセクションがある場合のみ ('#' またはその後にあるものは一致させません)?

使用している正規表現のスタイルの詳細がわからない場合は、次のようなものはどうですか:

id=([^#&]*)#
于 2012-12-07T16:31:54.930 に答える