我无法弄清楚如何匹配LAST /和行尾之间的模式。
我有很多:
的/ usr /等/布拉布拉:在/ etc / BBB
的/ usr /等/布拉布拉:在/ etc / bffb.gh
的/ usr /等/布拉布拉:/本地/ fffusr
的/ usr /等/布拉布拉:/ bin中/ dfusrd
的/ usr /等/ var:所有的/ etc / aaaaaf.ju
例如,我只想在“粗体”部分匹配“usr”
我正在使用grep。
编辑:
我对这个解决方案有一个小问题:
/([^ /] +)$
如果它紧跟在/之后,它与模式不匹配,例如那些:
在/ usr的/ etc /布拉布拉:/斌/ usrlala
/斌/ BLA /:在/ etc / USR
不匹配
找到它:/([^ /] *)$
答案 0 :(得分:2)
这将是:
/([^/]+)$
但也许你必须逃避斜线(/
),具体取决于你的语言:
/\/([^\/]+)$/
答案 1 :(得分:1)
为什么要在这么简单的任务中使用正则表达式?
如果您使用的是php,可以使用
$pos = strrpos($line, '/');
确定/的最后一次出现然后从那里复制所有内容
$name = substr($line, $pos+1);
正则表达式不是最终的解决方案。在这种简单的字符串操作上会更慢。好吧,你自己解析一个字符串的过程总是会慢一些(如果写好的话)。
答案 2 :(得分:1)
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
答案 3 :(得分:0)
在javascript中回答
var s = "/usr/etc/var:/etc/aaaaaf.ju"
s ; //# => /usr/etc/var:/etc/aaaaaf.ju
var last = s.match(/[^/]+$/);
last ; //# => aaaaaf.ju
答案 4 :(得分:0)
使用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
)
)