正規表現に関する 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. 見つかりません
;
}
~~~~~~~~~~~~~~~~~~~~~
ここでは、
================== ===================
======== ==================== =========
質問 3:
実際にはエスケープ文字として理解しますが、 C言語やPHPと同じで、nは改行文字、
tはタブ文字、\は/、$は転送されます。 $ か何かです
============== =======================
======================== ==============
質問 4:
次のコードは、百科事典の文字テーブルの 7 行目に基づいています。たとえば、正規表現
$str1=< 内の文字「the」と一致します。 ;
賢明な
テストのための
$pm1='/
if(preg_match($pm1,$str1))
{
echo '1. 見つかりません
';
}
else
{
echo '1. 見つかりません
';
}
見つからない理由は、メタキャラクター "" をその後に追加したためです。すべてのソフトウェアがサポートしているわけではありません。
=============== ======================= =
====================== ===============
質問5:
?番号の導入について、百度では全く理解できなかったので他の資料を探しました
。app?path の ? 番号の前にあるアプリはパスの前に 1 回出現すれば一致することは理解していますが、
$str1 のような文字の設定は理解できません。 =<<
test;
$pm1='/df?e/';
if (preg_match($pm1,$str1))
{
echo '1. 見つかりません
';
}
else
{
echo '1 が見つかりません
';
}
でも一致します! df は e の後にあります。これでは無駄に学習したような気がします。ルールはまだです!
-----解決策------------- -------
半分読みました。
/ は、定期的な状態が開始されたことを通知します。2 番目の / は、定期的な状態が終了したことを通知します。実際、これは単なる組み合わせです。## や他の文字を使用して、いわゆる始まりと終わりを置き換えることもできます。
ここで、/xxxxa/xxxxb/の場合、正規表現はxxxxaに到達すると終了するとみなしてしまい、後ほどエラーが発生しますので、この時点で単なる文字であることを明確にするためにエスケープする必要があります。終わりではなく真ん中。 これが、escape
$str1=<<
test;
$pm1='/
ここでの一致条件は、
残りは読んでいないので、他の人に教えてください(笑)
------解決策------------------
質問 1:
/これが実際の正規表現です/
正規表現は途中で // で囲む必要があります。修飾子がある場合は、最後の /
の後に追加します。例: preg_match( '/aaa $/is') ここでの is は修飾子です。それぞれの意味については、
を確認する必要があります。もちろん、// に含まれる正規表現にも / が含まれている場合は注意が必要です。
ここでの正規表現は // でラップされているか、または #@ でラップできることにも注意してください。
質問 2:
もちろんです。探しています。探しているのは
質問 3:
質問 1 で述べたように、正規表現をラップするために / も使用する場合は、当然エスケープする必要があり、$^? like はすべて特殊文字です。特殊文字を直接一致させたい場合は、もちろんエスケープする必要があります。そうしないと、コンピュータはそれらを特殊文字として扱います。 例:
内容: aaabbb$ccc
bb$cc が
1 に準拠しているかどうかを照合したい場合: /bb$cc/ これにはもちろん問題がありますが、文字通りの意味は上記と一致していますが、コンピューターは $ を最終的な意味として認識します
2。 : /bb$cc / これは正しいです