2017-12-25 20 views
-4

の一部をマッチング:正規表現 - 私は、次のURLの一部にマッチする正規表現を使用しようとしているURL

http://www.example.com/store/store.html?ptype=lst&id=370&3434323&root=nav_3&dir=desc&order=popularity

私は正規表現を検索する:

&3434323 

基本的には、variable=valueの式に従わない引数の部分を検索することを意味します。だから、基本的には、等号がないURLのセクションを検索する必要がありますが、その部分だけに一致します。

は、私が使用してみました:

& \ワット* + [^ _- =]

しかし、それが返されます。。次のアンパサンドを返さないようにする必要があります。

正規表現で行う必要があります。前もって感謝します!

+1

あなたの試行を投稿してください。 – jmargolisvt

+1

これはどの正規表現(読み込み:プログラミング言語)がうまくいくのでしょうか?確かに使いやすいライブラリがあるということを手で再現しているという特別な理由はありますか?確かに正規表現だけを指定することはできますが、ライブラリコードは指定できない場合がありますが、これが実際にそれらの1つであるのか、あまりにも多くの問題を抱えているのかは疑問です。 [この検索](https://stackoverflow.com/search?q=%5Bregex%5D+parse+url)を試し、使用しているプログラミング言語のタグを追加してください。 – tchrist

答えて

2

あなたは、この正規表現を使用することができます:それは等しい歌う[^=]+が含まれていない任意の文字列を検索し、疑問符またはアンパサンド[?&]で始まり、アンパサンドかの終わりで終わる

[?&][^=]+(&|$) 

をURL (&|$)

これは&3434323&を返すので、コードの両端にあるアンパサンドを削除する必要があることに注意してください。あなたはそれでいいと思います。あなたも、最初のアンパサンドをしたくない場合は、この正規表現を使用することができ、すべてではないのコンパイラはそれをサポート

[?&][^=]+(?=&|$) 

をあなたが本当に二アンパサンドたくない場合は、先読みを使用することができます
(?<=\?|&)[^=]+(?=&|$) 
+0

それは完全に機能しました。ありがとう! –

2

は、クエリパラメータを解析することは難しいことができますが、これは、仕事をすることがあります。

((?:[?&])[^=&]+)(?=&|$) 

それはパラメータの終わりにアンパサンドをキャッチしませんが、それは疑問符またはアンパサンドのいずれかが含まれますa始まりです。これは、キーと値のペアの形式でないすべてのパラメータと一致します。

デモhere

+2

ほとんどのregexコンパイラは '(?:\?|&)'のような単一コードポイントの最適化を '[?&] 'と比較して大幅に改善されたパフォーマンスを提供します。 – tchrist

関連する問題