2013-04-08 2 views
1

Может кто-то, пожалуйста, помогите мне улучшить это регулярное выражение так, чтобы оно захватывало все, что начинается с http: //, https: // или www, а затем продолжается до тех пор, пока оно не будет достигает "или» она включает в себя знаки препинания и не чувствительны к региструУлучшение этого регулярного выражения, чтобы включить его соответствие, пока оно не соответствует определенному символу.

Вот регулярное выражение прямо сейчас:..

(wwww|https?://) 
+0

Вместо того, чтобы пытаться написать регулярное выражение, чтобы сделать это, почему бы вам не найти существующее решение на вашем хост-языке? –

+0

@ AndyLester true, я ищу это прямо сейчас. То, что я пытаюсь сделать, это получить значение атрибута href для всех якорей в строке. Под якорем я подразумеваю html anchor. – IMUXIxD

+0

Итак, вы на самом деле разбираете HTML. Затем перейдите и получите парсер HTML. http://htmlparsing.com/ дает вам примеры для разных языков. Какой у вас язык? –

ответ

3
/(?:https?:\/\/|www)[^'"]*/i 

Я избежал косых черт, так как они могут конфликтовать, если вы используете обозначение /.../. [^'"] - это инвертированный класс символов, который позволяет использовать все, кроме кавычек.

Редактировать: я удалил каретку в соответствии с любым вхождением шаблона, :?, чтобы сделать группу не захватывающей.

+0

А, я вижу, что косые черты не экранированы. Перед тем, как я их реализую, я пробую их в этом тесте регулярного выражения (http://regexpal.com/) и хотя у вас больше смысла, он не подходит в соответствии с этим тестером. Я хочу все после http: //, https: // или www. до тех пор, пока не включит «или». – IMUXIxD

+0

Как вы его тестируете? Это выражение работает для меня в egrep. $ echo "www.google.com/asdf'dontmatchme" | egrep -oi "^ (https?: \/\/| www) [^ '\"] * "- примечание - цитата нуждается в ускорении .. если цитируется :-) –

+0

Это работает для меня в regexpal.com .. –

1
@(www|https?://).*?(?=['"])@i 

.*? делает квантор неохотно, так что остановится на первом цитата, а не последняя.

+0

Я тестирую его, и он, похоже, не работает ... – IMUXIxD

+0

Он даже не подходит для вещей, которые начинаются с http (s): // или www, не говоря уже о остановке на «или». – IMUXIxD

+0

Косые черты не удаляются –

0

следующее регулярное выражение будет работать:

(?:https?:\/\/|www)[^'"]* 

Вы можете пройти через детали матча в www.debuggex.com.

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