2016-09-14 2 views
3

Я должен получить строку, которая начинается с =" и заканчивается следующим ". Но он должен содержать символ <.Как добавить условия для регулярного выражения?

(="([^"])*<*") 

Строка:

dit niet "dit wel" dit ook niet ="maar <dit ""en""dit ook" 
REM dit niet "dit <wel" dit ook niet ="maar dit ""en""dit ook" 
dit niet "dit wel" REM "maar dit ""en""dit ook" 

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

Ожидаемый результат:

="maar <dit " 

Фактический результат:

="maar <dit " 
="maar dit " 

ПРИМЕЧАНИЕ: Необходимо получить все результаты, которые начинаются с =" и имеют < и заканчивается следующим появлением "

ответ

3

Ваши ="([^"])*<*" регулярные выражения =", то это захватывает любой символ, отличный от ", повторно (так что только в последнем случае его сохраняется в буфере группы 1), а затем ноль или более < символов, а затем ". Итак, ваше регулярное выражение действительно не требует a <, чтобы присутствовать в строке, которую вы соответствуете.

Вы можете использовать

="([^"<]*<[^"]*)" 

Смотрите regex demo

Детали:

  • =" - в =" последовательность
  • ([^"<]*<[^"]*) - 1 группа, которая будет содержать значение:
    • [^"<]* - ноль или больше символов, кроме " и <
    • < - это < символа
    • [^"]* - ноль или более си кроме "
  • " - двойная цитата
+0

Если вы заботитесь о ненужных возвратов, вам следует использовать '' * +, а не '' *. В то время как ваш ответ позволяет избежать обратного отслеживания в соответствующем случае, двигатель может тратить время в случае несоответствия, ища символы в месте, которое невозможно их скрыть. – Holger

+0

Регулятор @Holger JS не поддерживает притяжательные кванторы. –

+0

Хорошо, вопрос отмечен '[javascript]' * и * '[java]', что вызвало некоторую путаницу. Я думаю, OP должен решить для одного из них ... – Holger

2

Включите регулярное выражение в

(="([^"]*<[^"]*)*") 

Живой here

Эта часть ([^"]*<[^"]*) убедитесь, что ваша внутренняя строка будет содержать <

+2

Существует некоторая ненужная отмена вашего первого '[^"] * ' потому что он также соответствует '<'. См. мой ответ, как шаблон можно упорядочить. –

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