2

と を含むすべての英数字文字で URL を処理する正規表現があり-ます_。例外を追加したいので、URL/basicを処理せず、/advance

/?([a-zA-Z0-9_-]+)?/?([a-zA-Z0-9_-]+)?/?([0-9_-]+)?

「基本」と「高度」という言葉を除いて、上記のすべてを処理する必要があります。

上記の正規表現に例外を追加するにはどうすればよいですか。

以下のことをしようとしましたが、うまくいきませんでした。

/?([a-zA-Z0-9_-]+^(?!basic) ^(?!advance))?/?([a-zA-Z0-9_-]+)?/?([0-9_-]+)?

何か案は?

ガイドラインには次のリンクを使用しました。

正規表現を使用した文字列の否定
正規表現と文字グループ全体の否定
非キャプチャ グループとは? 疑問符の後にコロン (?:) が続くとはどういう意味ですか?

4

2 に答える 2

0

/\/(?!basic\/)(?!advance\/)([a-zA-Z0-9_-]+)?\/([a-zA-Z0-9_-]+)?\/([0-9_-]+)?/「ベーシック」または「アドバンス」がシーケンスの最初にしか立つことができない場合は、次のようなものを使用する必要があります。負の先読みコンポーネントの前に ^ 記号も、その間のスペースも必要ないと思います。

これをテストするスクリプトは次のとおりです。

<?PHP
    $ptn = "/\/(?!basic\/)(?!advance\/)([a-zA-Z0-9_-]+)?\/([a-zA-Z0-9_-]+)?\/([0-9_-]+)?/";
    $str = '/basic/asdasd/123'; 
    preg_match($ptn, $str, $match1);
    print_r($match1);
    $str = '/bazic/asdasd/123';
    preg_match($ptn, $str, $match2);
    print_r($match2);
?>
于 2012-06-20T09:30:25.853 に答える
0

これをチェックしますが、とにかく他の英数字以外の文字も一致しました!

/?([a-zA-Z0-9_-]+)?/?(?!.*(?:begin|advance))([a-zA-Z0-9_-]+)?/?([0-9_-]+)?

Debuggex デモ

于 2014-10-23T14:48:40.860 に答える