html要素を値として含むphp variabe行を見つけるためにgrepで使用する正規表現を作成しようとしたときに問題が発生しました。
私はこれをすることができました:
.*(\$)*(\=)*(\<).*\n?
$、=、および<文字を含む行と一致する必要があります。
たとえば、
$var = "<h1>test</h1>";
私が使用するGrapコマンドは次のとおりです。
grep -Pro ".*(\$)*(\=)*(\<).*\n?"
何らかの理由で、次の行にも一致するようです。
echo "</td> \n";
答え1
*
次のsはいつものようにゼロ個以上を意味します。(\$)
(\=)
.*\n?
0個以上のオプション文字を表します(?
、は0または1を表します)\n
。
これは、前にエスケープおよび/またはがあるかどうかにかかわらず、すべての行が.*(\$)*(\=)*(\<).*\n?
一致することを意味します。(\<)
$
=
英語では、この正規表現は「0個以上の文字、オプションで1個$
、可能な1個=
、1個<
(オプションではない)、0個以上の文字、オプションのSelectおよび改行文字」として読み込まれます。
つまり、正規表現全体(キャプチャを無視)<
は正規表現の唯一のものです。いいえ任意に選択できる。
しかし、1つ以上を意味する場合は、+
代わりに使用してください。*
次の作業をさらに試すこともできます。
grep -P '\$var\s*=\s*['"].*<[^>]+>'
$var
ゼロ個以上の空白文字、1個=
、再び0個以上の空白文字、1個または'
1個"
、0個以上のランダム文字、ランダムな<
文字の順に一致します。とは別にa >
、そして最後にa >
。
たとえば、$var='....<h1>'
一致します。
これは 'var=' と html の間の改行文字をキャプチャしないことに注意してください。$var='htmlcode'