Regex - Как я могу извлечь строку между двумя разными строками? - PullRequest
2 голосов
/ 22 февраля 2012

Учитывая следующую строку:

rebeka mecsek:/export/home5/users/rebeka;

Я хотел бы получить только слово "mecsek" из строки.Между словом "rebeka" и "mecsek" есть пробел, а строка начинается без пробела.

Я попробовал следующее:

$homeserver=~s/.*\s//;

Но я не хочудвоеточие или часть, следующая за ним, только слово "mecsek".

Может ли кто-нибудь мне помочь?

Большое спасибо!

Ответы [ 4 ]

4 голосов
/ 22 февраля 2012

Помните Правило Рэндала :

Рэндал Шварц (автор Learning Perl) говорит:

Используйте захват или m//g, когда вы знаетечто вы хотите сохранить .
использовать split, когда вы знаете, что хотите выбросить .

Вы знаете, чтоВы хотите сохранить, но вы не сказали нам все, что вы знаете.Вы хотите, чтобы последовательность символов слова следовала за первым пробелом в строке?

print $1, "\n" if $homeserver =~ / (\w+)/;

Хотите ли вы сохранить самую длинную, самую левую строку символов слова до :/, где бы это ни было?

print $1, "\n" if $homeserver =~ /(\w+):\//;

Можем ли мы зависеть от того, находится ли Ребека в начале строки?

print $1, "\n" if $homeserver =~ /^rebeka (\w+)/;

Если нет, можно ли предположить, что начало строки будет неким непрерывным пробегомсимволы слова?

print $1, "\n" if $homeserver =~ /^\w+ (\w+)/;

При сопоставлении с регулярными выражениями определите свои привязки: функции, на которые вы можете полагаться, присутствуя в тексте как маркеры или вспомогательные элементы для того, что вы хотите сохранить.Также обратите внимание, что в приведенных выше примерах $1 используется только внутри условных;никогда не используйте переменные захвата безоговорочно.

2 голосов
/ 22 февраля 2012

Как насчет:

$homeserver =~ s/^\S*\s(\S+):.*$/$1/;
0 голосов
/ 22 февраля 2012

Я голосую за образец /(?<=\S\s)([^\s:][^:]*):/, и результат в $1.

0 голосов
/ 22 февраля 2012

Вам нужно сопоставить всю строку тогда:

s/[^\s]+ ([^\s+]):.*/$1/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...