Как написать необязательное слово в регулярном выражении?

Я хочу написать регулярное выражение Java, которое распознает следующие шаблоны. abc def the ghi и abc def ghi

Я пробовал это:

abc def (the)? ghi

Но он не распознает второй шаблон. Где я ошибаюсь?


person AV94    schedule 14.09.2015    source источник


Ответы (2)


abc def (the )?ghi

           ^^

Удалите лишнее space

person vks    schedule 14.09.2015
comment
Большое спасибо!! Я потратил на это почти сутки. - person AV94; 14.09.2015
comment
лучший способ сказать спасибо - пометить этот ответ как принятый - person c.bear; 14.09.2015
comment
Регулярное выражение Java отличается в каком-либо смысле от обычного регулярного выражения. Смирись с моим невежеством. Я спрашиваю это, потому что твой сын работал здесь. regexr.com . но не тогда, когда я пишу для регулярного выражения Java. Итак, это то, что я сделал abc def (\ sthe)? ghi. это работало только тогда, когда его там не было. - person AV94; 14.09.2015
comment
@vks Я написал abc def(\\sthe)?ghi. Все тот же результат. Разве я не понял? - person AV94; 14.09.2015
comment
@anil это должно быть abc def(\\sthe)? ghi - person vks; 14.09.2015
comment
@vks Это не так. Если быть точным, я использую stanford regexner для своего проекта. Как часть этого, я написал это регулярное выражение. Regex, написанное выше, работает нормально, когда части нет. Но когда это так, шаблон не распознается. Где-то в другой ветке обсуждается, что java обрабатывает пробелы по-другому, я опубликую ссылку здесь. Пожалуйста, помогите мне, если сможете. Вот ссылка: stackoverflow.com/questions/4731055/ - person AV94; 14.09.2015
comment
@anil вместо \\s вы можете попробовать ` ` буквальное пространство - person vks; 14.09.2015

Пробелы также являются допустимыми символами в регулярном выражении, поэтому

abc def (the)? ghi
       ^      ^ --- spaces

может соответствовать только

abc def the ghi
       ^   ^---spaces

или когда мы удаляем the слово

abc def  ghi
       ^^---spaces

Вам нужно что-то вроде abc def( the)? ghi, чтобы также сделать одно из этих пробелов необязательным.

person Pshemo    schedule 14.09.2015