регулярное выражение: сопоставить шаблон между последним появлением символа "/" и концом строки - PullRequest
2 голосов
/ 14 апреля 2011

Я не могу понять, как сопоставить шаблон между LAST / и концом строки.У меня есть тонны:/ USR / и т.д. / блаб: / и т.д. / ГЭБ /usr/etc/blabla:/etc/bffb.gh/ USR / и т.д. / блабла: / местные / fffusr / USR / и т.д. / блабло: / bin / dfusrd /usr/etc/var:/etc/aaaaaf.juНапример, я хочу соответствовать «usr» только тогда, когда оно выделено жирным шрифтом.Я использую grep.

РЕДАКТИРОВАТЬ:У меня есть небольшая проблема с этим решением:/ ([^ /] +) $Он не соответствует шаблону, если он находится сразу после /, например:/ USR / и т.д. / блабло: / bin / usrlala/ Бен / л /: / и т.д. / USRне совпадают

НАЙДЕНО: / ([^ /] *) $

Ответы [ 5 ]

2 голосов
/ 14 апреля 2011

Было бы:

/([^/]+)$

Но, возможно, вы должны избежать косой черты (/) в зависимости от вашего языка:

/\/([^\/]+)$/
1 голос
/ 14 апреля 2011
echo "
/usr/etc/blabla:/etc/bbb
/usr/etc/blabla:/etc/bffb.gh
/usr/etc/blabla:/local/fffusr
/usr/etc/blabla:/bin/dfusrd
/usr/etc/var:/etc/aaaaaf.ju" | sed -n 's#.*/##;/.*usr.*/p'
fffusr
dfusrd
1 голос
/ 14 апреля 2011

Почему вы хотите использовать регулярные выражения в такой простой задаче?

Если вы используете php, вы можете использовать

$pos = strrpos($line, '/'); 

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

$name = substr($line, $pos+1);

регулярное выражение не является окончательным решением для всего. Это будет медленнее при таких простых строковых операциях.Что ж, это всегда будет медленнее вашей собственной процедуры анализа строки (если она написана правильно).

0 голосов
/ 14 апреля 2011

Использование PCRE:

$re = '/.+\/.*usr.*/i';

$string = '/usr/etc/blabla:/etc/bbb
/usr/etc/blabla:/etc/bffb.gh
/usr/etc/blabla:/local/fffusr
/usr/etc/blabla:/bin/dfusrd
/usr/etc/var:/etc/aaaaaf.ju';

$nMatches = preg_match_all($re, $string, $aMatches);

Результат:

Array
(
    [0] => Array
        (
            [0] => /usr/etc/blabla:/local/fffusr
            [1] => /usr/etc/blabla:/bin/dfusrd
        )

)
0 голосов
/ 14 апреля 2011

ответ в JavaScript

var s = "/usr/etc/var:/etc/aaaaaf.ju"
s ; //# => /usr/etc/var:/etc/aaaaaf.ju
var last = s.match(/[^/]+$/);
last ; //# => aaaaaf.ju
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...