2015-11-04 6 views
0

Я хочу найти все экземпляры комментариев, начиная с //, но я хочу исключить все URL-адреса, которые выглядят как http://.Regex, за исключением супер-шаблона

Как это сделать с помощью регулярного выражения?

((?!http:)//).*\n // This does not work as URLs are still matched. 
+1

Я думаю, вы можете использовать '(?

+0

@stribizhev Да, что работает. Это негативный взгляд? – Ben

+0

Sublime text 3 - любой вкус, который ... – Ben

ответ

1

(?!...) негативный взгляд вперед (, если не последует); вам нужен отрицательный взгляд позади (, если не предшествует): (?<!...).

2

Я хочу, чтобы найти все экземпляры комментариев начиная с //

Почему вы не можете просто использовать ^// или я что-то отсутствует? Вы можете использовать ^\s+// для учета любых пробелов, которые могут возникнуть.

Хорошо. Я получаю то, что вы говорите, но в этом случае, вы могли бы сделать это следующим образом:

(^|[^:]|\s+)(\/\/.*) 

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

Как: $1replacement_term_here

Regex101.

+0

Поскольку ваше регулярное выражение не соответствует функции foo() {} // мой комментарий. Мой оригинальный вопрос, возможно, был неясным. – Ben

+0

@BenAston проверить мое редактирование. –

+0

Это регулярное выражение будет соответствовать предыдущим символам (например, ':' или '\ s') То есть, если вы замените совпадения на пустую строку в 'foo() {} // bar', вы получите' foo() {': last'} 'также будет удалено. Вот почему Я считаю, что lookbehind лучше подходит для потребностей OP. – sp00m

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