3

「listing」の後にのみ「name」と一致させる必要がありますが、もちろん、それらの単語は任意のURLディレクトリまたはページである可能性があります。

mydomain.com/listing/name

したがって、私が「登録」(要求)できるのは、そこにある親ディレクトリになることだけです。つまり、「位置」、つまりドメインの2番目に来るものを一致させたいのです。

私は次のようなことを試みています

(?<=mydomain\.com/[^/\?&]+/)[^/\?&]+(?:/)?

ただし、文字セットはポジティブルックビハインド内では機能しません。少なくとも、1つの文字のみに一致するように設定されています。1つ以外を一致させようとすると(たとえば、+、?、または*で変更すると)、機能しなくなります。

私は明らかに前向きな後読み構文を見逃しており、それは私が試していることを意図していないようです。

その第2レベルのファイル名をどのように一致させることができますか?

ありがとう。

4

1 に答える 1

2

Regular-expressions.infoは、次のように述べています。

悪いニュースは、ほとんどの正規表現フレーバーでは、正規表現を逆方向に適用できないため、後読みの中で正規表現だけを使用できないことです。したがって、正規表現エンジンは、後読みを確認する前に、ステップバックするステップ数を把握できる必要があります...

(さらに読むと、Perl、Python、Javaについても言及されています。)

数量詞が問題かもしれないと思います。私はこれをstackoverflowで見つけ、簡単に飛び越えました。

パス全体を一致させて、第2レベルのファイル名にグループを使用することはできません。

mydomain\.com\/[^\/\?&]+\/([^\/\?&]+)(?:\/)?

(注:テストのために/をエスケープする必要がありました...)

この結果は次のようになります。

Array
(
    [0] => mydomain.com/listing/name
    [1] => name
)

ここで、問題のコンテキストがわからないため、結果を後処理して、結果からグループ1(インデックス1)を取得できると仮定しました。そうでなければ、残念ながらわかりません...

于 2012-07-27T08:13:31.707 に答える