Perl одна строка регулярное выражение escape ^ символ - PullRequest
2 голосов
/ 08 марта 2011

У меня есть строка, начинающаяся с символа ^, я хочу начать строку и символ ^. но это не работа.

echo "^./mnt/" |perl -slane ' print if m#^$line$#o' -- -line="^./mnt/"

как мне сопоставить это регулярное выражение с входным регулярным выражением, переданным в качестве аргумента.

это работает, но я бы хотел, чтобы оно работало с per-in.

#echo "^./mnt/" |perl -slane ' print if m#^$line$#o' -- -line="\\^./mnt/"
^./mnt/

Спасибо SR

Ответы [ 3 ]

2 голосов
/ 08 марта 2011

Для преобразования текста в шаблон регулярного выражения используйте quotemeta (возможно, через \ Q .. \ E).

echo "^./mnt/" |perl -slne'print if /^\Q$line\E$/' -- -line="^./mnt/"

В этом случае вы можете просто использовать

echo "^./mnt/" |perl -slne'print if $_ eq $line' -- -line="^./mnt/"
2 голосов
/ 08 марта 2011

Вам нужно экранировать специальные символы в вашем аргументе (как если бы он был встроен непосредственно в регулярное выражение).

echo "^./mnt/" |perl -slane ' print if m#^$line$#o' -- -line="\^\.\/mnt\/"

1 голос
/ 08 марта 2011

возможно m#^\Q$line\E# или m#^\Q$_\E#, но не уверен, потому что я на виндозке

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