0

("/(\w+)\")次の関数を途中のセグメントと一致させて、英数字 & などの URL 文字を許可するにはどうすればよい_.- ですか?

if(preg_match('/^\/segment1\/(\w+)\/segment2/', '/segment1/aAbB0123.-_Z/segment2', $match)) {                       
    print_r($match);
    /*
    * Array
    (
        [0] => /segment1/s/segment2
        [1] => aAbB0123.-_Z
    )
    *
}
4

1 に答える 1

1

パターンにはもう 1 つの問題があります。最後にスラッシュが必要ですが、入力にはスラッシュがありません。私はそれをオプションにすることさえしません。完全に省略してください。それ以上のオプションはありません。

ここでの目標は、検証することですか、それとも中間セグメントをキャプチャすることですか? あなたの例では、部分式を持つ他の理由がないため、キャプチャを想定しています。いくつかの正確な入力例と、実際に必要なものを提供するのが最善です。

したがって、いくつかのオプションがあります。

超怠け者:

segment1/(.*?)/segment2

1 つのサブセグメント、これも超怠惰:

segment1/([^/]+)/segment2

正確な要件(URLに必要なものを見つけてください。リストした文字の一部はURLでは許可されておらず、クエリ文字列だけで許可されていると確信しています):

segment1/([-\w&.%=#]+)/segment2

複数のセグメントを許可、レイジー:

segment1/((?:[^/]+/?)+)/segment2

複数のセグメントを許可する、正確な要件:

segment1/((?:[-\w&.%=#]+/?)+)/segment2

設定によっては、いくつかをエスケープする必要がある場合があります。

于 2013-05-24T19:45:49.073 に答える