先輩方、こんにちは!初心者なので質問したいことがあります。
最近「PHP の詳細」を読んでいたのですが、その本には、正規表現内の各部分表現 (() で囲まれたもの) は、非キャプチャ メタ文字を追加せずに、左から右に一致すると書かれていました。各部分式の結果はバッファに格納され、1 から 99 までの数字で参照されます。正しい記述かどうかはわかりません。ここで 2 つの質問があります: 1. この本には、数値を使用して部分式を参照するときは、数値の前にバックスラッシュ エスケープを追加する必要があると書かれています。これは、どのバージョンにも関係ありません。関係?
2. 式内で、特定の部分式にメタキャラクタ ?: が追加されているため、一致結果が保存されず、バッファの数が 1 つも増えず、保存する方法がありません。番号で参照すると、それを繰り返すことができます。 この部分式を呼び出しますか?
ありがとう!
は必要ありません
モデレータさん、返信ありがとうございます。 PHP では、一致に preg_match を使用します。パターンは '^([a-zA-Z]*)d+1$' です。これは、文字列 'demo123demo' を一致させることを意味します。 。パターン内の数値の前にバックスラッシュを追加すると、false が返されます。 上記は私が自分で試してみたものです。そこで百度でいくつかの「正規表現リファレンスマニュアル」を検索したところ、いくつかの例に追加する必要はありませんでした。
添付リンク (リンクの投稿が投稿ルールに違反するかどうかはわかりません): https://translate.google.com.hk/?hl=zh-CN&tab=wT そこにはポイント 6 の例はありません。 。
さて、私が本当に答えを得たいのは、「バージョンの違い」の問題があるかどうかを判断するために、この質問を拡張したいだけです。モデレータに迷惑をかけて申し訳ありません。
/^([a-zA-Z]*)d+ 1$/
これは
エスケープする数値の前にバックスラッシュを追加するだけ ではないでしょうか?
2 番目の質問の意味はこれでしょうか?
/^(?=[a-zA-Z]+)d+(?=[a-zA-Z]+)$/
最初のものはバックスラッシュでエスケープします。私が読んだ本には、数字自体は1から99までと書かれていました。引用したい場合は、本にあるようにバックスラッシュを追加する必要があります。これは「\1」です。それで、昨夜何かがおかしいと感じて、バックスラッシュを追加すると文字列「1」と一致することを発見しました。この本に書かれているすべてを信用することはできないようです
お二人とも本当にありがとうございました!