html 요소를 값으로 포함하는 php variabe 행을 찾기 위해 grep과 함께 사용할 정규 표현식을 만들려고 하는데 문제가 발생했습니다.
나는 이것을 할 수 있었다:
.*(\$)*(\=)*(\<).*\n?
$, = 및 < 문자가 포함된 행과 일치해야 합니다.
예를 들어:
$var = "<h1>test</h1>";
내가 사용하는 Grep 명령은 다음과 같습니다.
grep -Pro ".*(\$)*(\=)*(\<).*\n?"
어떤 이유로 다음과 같은 줄과도 일치하는 것 같습니다.
echo "</td> \n";
답변1
*
다음 s는 항상 그렇듯이 0개 이상을 의미합니다 .(\$)
(\=)
.*\n?
0개 이상의 선택적 문자를 나타냅니다 ( ?
, 은 0 또는 1을 나타냄) \n
.
이는 앞에 이스케이프 및/또는 가 있는지 여부에 관계없이 .*(\$)*(\=)*(\<).*\n?
모든 줄이 일치함을 의미합니다 .(\<)
$
=
영어에서 이 정규식은 "0개 이상의 문자, 선택적으로 1개 $
, 가능한 1개 =
, 1개 <
(선택 사항 아님), 0개 이상의 문자, 선택적인 Select 및 개행 문자"로 읽혀집니다.
즉, 전체 정규식(캡처 무시) <
은 정규식의 유일한 것입니다.아니요임의로 선택할 수 있는.
그런데, 하나 이상을 의미한다면 +
대신 사용하세요.*
다음과 같은 작업을 더 시도해 볼 수도 있습니다.
grep -P '\$var\s*=\s*['"].*<[^>]+>'
$var
0개 이상의 공백 문자, 1개 =
, 다시 0개 이상의 공백 문자, 1개 '
또는 1개 "
, 0개 이상의 임의 문자, <
임의의 문자 순으로 일치합니다 .와는 별개로a >
, 그리고 마지막으로 a >
.
예를 들어 $var='....<h1>'
일치합니다.
이는 'var='과 html 사이의 개행 문자를 포착하지 않는다는 점에 유의하세요.$var='htmlcode'