1

私は正規表現を持っています

|^(/[a-z]{2})?/?(php)/([-a-z0-9]+)/?/?$|

どのマッチ/php/anything

今、両方に一致する正規表現が必要です

/php/anything
/java/anything

疲れ|^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$|ましたが、うまくいきません。

誰かが解決策を手伝ってくれますか? 他の部分はすべて保持したいが、一部だけを変更したい(php)

ここにコードがあります

preg_match("|^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$|", 'php/anything')

しかし、この警告が表示され、一致が機能しません

Warning: preg_match(): Unknown modifier 'j' 

ありがとう

4

2 に答える 2

1

問題は単純に、パターンを区切る文字としてパイプ記号を使用していることです。したがって、パターン自体の中でパイプ記号をエスケープするか、区切り文字をパターンで使用しない別のものに変更する必要があります。

#^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$#
{^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$}

于 2012-12-14T12:25:43.303 に答える
1

|正規表現の区切り文字として使用して|いますが、エスケープする必要がある変更として正規表現の中にあります。そうしないと、2番目|が正規表現の終わりとして扱われ、それに続く文字jが正規表現修飾子として扱われます。jは有効な修飾子ではないため、エラーが発生します。

次のようにエスケープし|ます。

preg_match("|^(/[a-z]{2})?/?(php\|java)/([-a-z0-9]+)/?/?$|", 'php/anything')
                                ^

または、別の区切り文字のペアを使用できます。

preg_match("~^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$~", 'php/anything')
            ^                                           ^
于 2012-12-14T12:26:19.863 に答える