ホームページ >バックエンド開発 >PHPチュートリアル >正規表現に関する N 個の関連質問

正規表現に関する N 個の関連質問

WBOY
WBOYオリジナル
2016-06-13 13:48:00839ブラウズ

正規表現に関する N 個の質問
うーん、数日前の投稿で述べたように、私は正規表現を学び始めました
3 ~ 2 日手探りで、今では実際にできる質問がいくつかありますわかりません
私が今持っている本はあまり詳しくありませんが、百度百科で知りました
本題に戻ります
============== ====== =================
===================== ======== ========
質問 1:
お聞きしたいのですが、正規表現では通常、コンテンツをラップするために

/ を使用する必要がありますか? /

もしそうなら、それが修飾子の場合、修飾子は 2 番目の / 記号の後に書く必要がありますか (たとえば、/aAa/i は修飾子として i を使用し、2 番目の / 記号の後に置く必要があります)
これは Baidu Encyclopedia から学びました。次のようになります。

$
は行末記号と一致します。たとえば、正規表現 weasel$ は、文字列「彼はイタチです」
の末尾には一致しますが、文字列「彼らはイタチの群れです。」


には一致しないので、このように書きました。 PHP コードのデバッグでは、
$str2="彼はイタチです";
$pm2='weasel$';

if(preg_match($pm2,$str2))
{
echo 'True
';
}
else
{
echo 'False
';
}

しかし結果はは失敗です
長い間いじくり回した後、最終的に
$pm2='weasel$';

$pm2='/weasel$/';

に変更することに成功しました。 , でも百科事典は失敗しました そんなこと言ってないです…
よく読んでなかったかもです
ここで確認させてください 検索内容は左右の/記号と修飾子で囲まれています。 2 番目の / 記号の後にありますよね? 書き方のルールすらまだわかりません...ましてやマッチングルール


========。 ====================== =========
================ ======================
質問 2:
「メタキャラクター」について言及している百科事典の最初の表では、* 記号の機能4 行目に記載されているように、マッチングに .* を使用することは理解していますが、その後に「たとえば、.* は、それが何であっても に一致します 」と書かれています。

そこで、上記のコードを使用してテストしましたが、
が見つからないことがわかりました~~~ ~~~~~~~~~~~~~~~~~~~
$str1=<<
test;

$pm1='/.*/';

if(preg_match($pm1,$str1))
{
echo '1. 見つかりました< ;br/>';
}
else
{
echo ' 1. 見つかりません
;
}



~~~~~~~~~~~~~~~~~~~~~
ここでは、とあります。* には / が含まれていますが、/ が式の終端記号と間違われる可能性があることに気づき、/ に変更しましたが、それも機能しませんでした。私は実際にその説明を次のように理解しました: ここの内容は < ;T>* この式は一致しますが、この式の書き方がわかりません

================== ===================
======== ==================== =========
質問 3:
実際にはエスケープ文字として理解しますが、 C言語やPHPと同じで、nは改行文字、
tはタブ文字、\は/、$は転送されます。 $ か何かです


============== =======================
======================== ==============
質問 4:
次のコードは、百科事典の文字テーブルの 7 行目に基づいています。たとえば、正規表現 は、文字列「for the wise」

$str1=< 内の文字「the」と一致します。 ;
賢明な
テストのための

$pm1='/ /';
if(preg_match($pm1,$str1))
{
echo '1. 見つかりません
';
}
else
{
echo '1. 見つかりません
';
}

見つからない理由は、メタキャラクター "" をその後に追加したためです。すべてのソフトウェアがサポートしているわけではありません。

=============== ======================= =
====================== ===============
質問5:
?番号の導入について、百度では全く理解できなかったので他の資料を探しました
。app?path の ? 番号の前にあるアプリはパスの前に 1 回出現すれば一致することは理解していますが、

$str1 のような文字の設定は理解できません。 =<<abcdefg
test;

$pm1='/df?e/';
if (preg_match($pm1,$str1))
{
echo '1. 見つかりません
';
}
else
{
echo '1 が見つかりません
';
}

でも一致します! df は e の後にあります。これでは無駄に学習したような気がします。ルールはまだです!




-----解決策------------- -------
半分読みました。

/ は、定期的な状態が開始されたことを通知します。2 番目の / は、定期的な状態が終了したことを通知します。実際、これは単なる組み合わせです。## や他の文字を使用して、いわゆる始まりと終わりを置き換えることもできます。

ここで、/xxxxa/xxxxb/の場合、正規表現はxxxxaに到達すると終了するとみなしてしまい、後ほどエラーが発生しますので、この時点で単なる文字であることを明確にするためにエスケープする必要があります。終わりではなく真ん中。 これが、escape

$str1=<<
test;

$pm1='//';

ここでの一致条件は、 で始まり で終わる任意の文字です。 もちろん、str1 は
で終わりません。合わないよ。
残りは読んでいないので、他の人に教えてください(笑)
------解決策------------------
質問 1:
/これが実際の正規表現です/
正規表現は途中で // で囲む必要があります。修飾子がある場合は、最後の /
の後に追加します。例: preg_match( '/aaa $/is') ここでの is は修飾子です。それぞれの意味については、
を確認する必要があります。もちろん、// に含まれる正規表現にも / が含まれている場合は注意が必要です。
ここでの正規表現は // でラップされているか、または #@ でラップできることにも注意してください。

質問 2:
もちろんです。探しています。探しているのは とその間のコンテンツです。これは明らかに条件を満たしていません。要件が見つからないのは正常です。RP に問題があることがわかりました。

質問 3:
質問 1 で述べたように、正規表現をラップするために / も使用する場合は、当然エスケープする必要があり、$^? like はすべて特殊文字です。特殊文字を直接一致させたい場合は、もちろんエスケープする必要があります。そうしないと、コンピュータはそれらを特殊文字として扱います。 例:
内容: aaabbb$ccc
bb$cc が
1 に準拠しているかどうかを照合したい場合: /bb$cc/ これにはもちろん問題がありますが、文字通りの意味は上記と一致していますが、コンピューターは $ を最終的な意味として認識します
2。 : /bb$cc / これは正しいです

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。