Регулярное выражение для выбора подстроки - PullRequest
2 голосов
/ 16 января 2012

У меня есть строка ввода

DISPLAY_MSG='Kumar + sajdhjhasd - Type' 
              and  ID=156090 
              and RESOURCE_KEY='Ascend.ElementMaster.kumar_type.desc' 
              and  LOCALE='en_US'

Я хочу сопоставить только DISPLAY_MSG='Kumar + sajdhjhasd - Type', но с использованием этого выражения

DISPLAY_MSG='[\\w\\W\\s\\S]*

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

DISPLAY_MSG=

Ответы [ 3 ]

3 голосов
/ 16 января 2012

Это регулярное выражение совершенно бессмысленно.

[\w\W\s\S] означает: сопоставить символ, если он является буквенно-цифровым или не буквенно-цифровым, либо пробелом, либо не пробелом.Точно такой же результат может быть достигнут с помощью (?s)..

Только в JavaScript (где опция (?s), которая позволяет точке соответствовать символу новой строки, недоступна, имеет смысл вместо этого написать [\s\S]. Но [\w\W\s\S] определенно избыточен.

Итак, лучшее решение с использованием ленивых квантификаторов было бы

DISPLAY_MSG='(?s).*?'

Но еще лучше было бы на самом деле указать, что разрешено между кавычками, и обычно это что-то , но кавычка:

DISPLAY_MSG='[^']*'
2 голосов
/ 16 января 2012

Вы должны использовать ungreedy quantifier. Попробуйте это:

DISPLAY_MSG='[\\w\\W\\s\\S]*?'
2 голосов
/ 16 января 2012

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

RegEx: наименьшее возможное совпадение или несжатое совпадение

Вот хороший пример http://www.exampledepot.com/egs/java.util.regex/greedy.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...