ホームページ > バックエンド開発 > PHPチュートリアル > 初心者向けアドバイス: 正規表現の後方参照に関する質問

初心者向けアドバイス: 正規表現の後方参照に関する質問

WBOY
リリース: 2016-06-23 13:56:13
オリジナル
991 人が閲覧しました

先輩方、こんにちは!初心者なので質問したいことがあります。

最近「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」と一致することを発見しました。この本に書かれているすべてを信用することはできないようです
お二人とも本当にありがとうございました!

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート