Пробелы в файлах PHP иногда проблематичны, поэтому я пытаюсь найти файлы, которые отвечают общим проблемным критериям. Я пытаюсь найти все файлы, рекурсивно, которые имеют одно или оба из этих условий:
1) Не начинается с символа <
или #
.
и / или
2) Не заканчивается символом a >
, если он не заканчивается в тесной привязке, за которой следует любое количество строк новой строки.
Я думаю, что первое условие: $[^<#]
Я думаю, что второе условие было бы: [ [^>^] | [}\n*^]]
[ [^>^] | [}\n*^]]
Однако обратите внимание, что в моих наивных регулярных выражениях $
и ^
представляют начало и конец файла, а не любую строку в файле. И даже с теми, считая, что они были правильными, как бы я их совмещал? Вот так?
[$[^<#]] | [[ [^>^] | [}\n*^]]]
Затем, помещая их в grep:
grep -r [$[^<#]] | [[ [^>^] | [}\n*^]]] *
Очевидно, что это не работает ™. Может ли кто-нибудь научить меня исправлять ошибки? Благодарю.
Это хороший файл:
<?php ?>
Вот так:
<?php function someFunc(){ }
И это тоже хорошо:
#!/usr/bin/php -q <?php ?>
Ведущий HTML в порядке:
<html> <?php echo '</html>'; ?>
Трейлинг HTML тоже хорош:
<?php echo '<html>'; ?> </html>
Это плохо (ведущая новая строка):
<?php ?>
Это тоже плохо (ведущее пространство):
<?php ?>
Это плохо также (завершение новой строки):
<?php ?>
Выражение выражения очень быстро, я думаю, делает то, что вы хотите. Сейчас довольно поздно, и по какой-то причине я нахожусь в stackoverflow. Несмотря на это, я надеюсь, что я получил ваш запрос.
Попробуйте это регулярное выражение /\A(?:\s+.*>|[^<#].*>\s*|<.*>\s+)\Z/s
. Разъясняется здесь: http://regex101.com/r/cT7eY5
Надеюсь, эта помощь. Если я вас неправильно понял, проясните, и я попытаюсь настроить выражение.