2013-03-14 2 views
2

Я ищу, чтобы извлечь все сформировать строку, но игнорировать все, встретив цифры после косой черты (буквенно-цифровой разрешено)Regex, чтобы извлечь все до тех пор, пока не встретится число после косой черты

Примеры:

http://www.test.com/products/cards/product_code100/12345/something_else 
http://www.test.com/products/123abc/45678/ 

Желаемый выход -

http://www.test.com/products/cards/product_code100/ 
http://www.test.com/products/123abc/ 

следующее регулярное выражение дает мне все, что в обратных ссылках, но это будет здорово, если бы я мог избавиться от цифр после slash-

^(.*:)//([a-z\-.]+)(:[0-9]+)?(.*) 

Дополнительная информация - Требуется измерение с независимым отступлением.

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

+0

[Что вы пробовали? ] (http://www.whathaveyoutried.com) Цель этого сайта - найти помощь по конкретным проблемам, где * ваше собственное решение * работает неправильно. Это не означает, что вы можете размещать задачи, которые другие люди решат для вас. –

+0

Второй пример не работает, есть числа после косой черты – alestanis

+1

Нет такой вещи, как «независимые от языка» регулярные выражения. Существует несколько «стандартов», таких как POSIX, расширенные POSIX и регулярные выражения Perl, которые часто копируются/поддерживаются. Но, насколько мне известно, ничего, что пробегает * везде *. Итак, на каких языках вам это нужно? – creinig

ответ

1

это должно работать с большинством языков и должна производить желаемый результат

(http://.*)(?=/\d+(?!\w+)) 

Он принимает каждый символ до тех пор, пока не найдет (предпросмотр) \ следует число.

Если бы попытаться соответствовать

http://www.test.com/products/123abc/ 
or 
http://www.test.com/products/123abc 

он просто не нашел бы матч, и вы можете быть уверены, что строка проверяется оленья кожа сталкиваются чистый номер после косой черты

+0

Спасибо - Это почти что. Но это не похоже на то, если после косой черты нет цифры - Ex. http://www.test.com/products/abc123/ –

1

Пример в Perl:

echo "http://...." | perl -pe 's/(.*\/)\d+\/.*/$1/' 

или:

echo "http://...." | perl -ne 'print "$1\n" if /(.*\/)\d+\/.*/' 

Edit: Это не правда, что @creinig отметил в своем комментарии - нет такой вещи, как общее регулярное выражение. Тем не менее, Perl широко используется, поэтому это вариант.

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