Как я могу сопоставить в начале любой строки, включая первую, регулярное выражение Perl? - PullRequest
4 голосов
/ 12 марта 2010

Согласно документации Perl о регулярных выражениях :

По умолчанию символ «^» гарантированно соответствует только началу строки ... Встроенные символы новой строки не будут совпадать с «^» ... Однако вы можете захотеть рассматривать строку как мульти -линейный буфер, такой, что «^» будет соответствовать после любой новой строки в строке ... это можно сделать с помощью модификатора / m в операторе сопоставления с образцом.

Часть после любой новой строки означает, что она будет совпадать только в начале 2-й и последующих строк. Что делать, если я хочу найти соответствие в начале любой строки (1-й, 2-й и т. Д.)?

РЕДАКТИРОВАТЬ: ОК, кажется, что файл имеет информацию о спецификациях (3 символа) в начале, и это то, что меня запутало. Есть ли способ заставить ^ совпадать?

РЕДАКТИРОВАТЬ: Так, в конце концов, это работает (до тех пор, пока нет спецификации), но теперь кажется, что документация Perl неверна, так как он говорит «после любой новой строки»

Ответы [ 4 ]

3 голосов
/ 12 марта 2010

Вы можете использовать регулярное выражение /^(?:\xEF\xBB\xBF)?/mg для сопоставления в начале строки, если хотите сохранить спецификацию.

3 голосов
/ 12 марта 2010

^ соответствует совпадению 1-й строки с флагом /m:

~:1932$ perl -e '$a="12\n23\n34";$a=~s/^/:/gm;print $a'
:12
:23
:34

Чтобы соответствовать спецификации, необходимо включить ее в матч.

~:1939$ perl -e '$a="12\n23\n34";$a=~s/^(\d)/<\1>:/mg;print $a'
12
<2>:3
<3>:4
~:1940$ perl -e '$a="12\n23\n34";$a=~s/^(?:)?(\d)/<\1>:/mg;print $a'
<1>:2
<2>:3
<3>:4
1 голос
/ 12 марта 2010

Концептуально предполагается, что перед началом строки должен стоять символ новой строки. Следовательно, / ^ a / найдет букву «a» в начале строки.

0 голосов
/ 05 февраля 2013

Поместите пустую строку в начало файла , это здорово, и избегайте затруднения чтения regex.

Да, спецификация. Может появиться в начале файла, поэтому поместите пустое в начале файла. BOM не будет \s, или что-то можно увидеть невооруженным глазом. Это убивает мои часы, когда из-за спецификации мой regex выходит из строя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...