2015-07-30 3 views
3

мне нужно вырезать форму имя_файла ссылки, как это:Regex вырезать имя файла из URL

url('../webfonts/2EC49F_0_0.eot') 

Так что мне нужно, чтобы сократить путь '2EC49F', я создаю эту модель: ([\/]].*?[_]) Но его не работает. Я использую Java Pattern/Matcher.

+3

regex имеет разные вкусы - зависит от языка программирования, который вы используете. Кроме того, поскольку то, что вы ищете, находится между последним '/' до последней точки - вам не нужно * использовать регулярное выражение вообще! – alfasin

ответ

1

Я думаю, что вы можете использовать этот

/.*?([^\/]*$)/ 

или

.*(?<=\/)([^_.]*).*$ 

Что вы можете использовать \1 замену.

+0

Мне нужно просто разрезать '2EC49F' между '/' и перед первым '_' – MeetJoeBlack

+0

@MeetJoeBlack Я думаю, что второе - это то, что вы хотите. –

1

Вы можете использовать следующий шаблон для матча:

([^_\/]*)_ 

и заменить его пустой строкой.

2

Вы можете использовать регулярное выражение lookaround на основе для сравнения:

(?<=/)[^/_]+(?=_) 

RegEx Demo

0

Как указывается в комментариях, не использовать регулярное выражение. Вместо этого:

String url(String input) { 
    int slashLoc = input.lastIndexOf('/'); 
    int underLoc = input.indexOf('_', slashLoc); 
    if (slashLoc != -1 && underLoc && slashLoc+1 < underLoc) { // sanity check 
     return input.substring(shashLoc, underLoc); 
    } else return ""; 
} 
+0

Это работает быстрее? – MeetJoeBlack

+0

неинтуитивно, это длинный код, но да, он должен быть быстрее. – Barett

Смежные вопросы