escape-символы Perl Regex - PullRequest
       1

escape-символы Perl Regex

4 голосов
/ 29 декабря 2010

Я слышал, что Perl - хороший язык для выполнения регулярных выражений, но я немного запутался в символах, которые требуют экранирования

Я протестировал код на http://regexlib.com/RETester.aspx и получил желаемый результат

//home/dev/abc/code/hello/world.cpp#1
//home/dev/((.*?)/[^/]+).*#

Match   $1  $2
//home/dev/abc/code/hello/world.cpp#    abc/code    abc

Однако я не совсем уверен, как мне перевести это на Perl-код

Я пытался

\/\/home\/dev\/\(\(\.\*\?\)\/\[\^\/\]\+\)\.\*\#

и

\/\/home\/dev\/((.*?)\/[^\/]+).*\#

и оба потерпели неудачу

Не думаете ли вы, что выход делает регулярное выражение очень нечитаемым?Я использую что-то не так?

Ответы [ 2 ]

8 голосов
/ 29 декабря 2010

Если вы используете Perl, вам не нужно использовать / в качестве разделителя регулярных выражений, если вы предшествуете разделителю с «m» для оператора сопоставления или «s» для оператора подстановки (например, вы можете использовать # или ! или даже любые сбалансированные скобки / скобки: s[this][that]), и тогда вам не нужно экранировать /. Вы также можете использовать функцию quotemeta или \Q\E regex escape-последовательности , которые автоматически экранируют любые метасимволы.

5 голосов
/ 29 декабря 2010

Вы можете выбрать использование ! вместо /, чтобы окружить ваше регулярное выражение, чтобы вам не пришлось экранировать /.

m!//home/dev/((.*?)/[^/]+).*#!

.Вот оно в действии: http://ideone.com/TDrBG

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