2014-10-02 6 views
0

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

\".+\"; 

Это будет соответствовать любой строке, кроме пустого одного, как показано ниже:

""; 

Я попытался используя это:

\".+?\"; 

Но это не сработало.

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

ответ

3

Чтобы сделать .+ по желанию, вы можете сделать:

\"(?:.+)?\"; 

(?:..) называется non-capturing group. Он выполняет только операцию сопоставления, и он ничего не захватит. Добавление ? после того, как группа, не участвующая в съемке, делает всю группу, не связанную с захватом, необязательной.

В качестве альтернативы, вы можете сделать:

\".*?\"; 

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

+1

Возможно, стоит упомянуть, что такое '?:' В группе и почему оно может (или не обязательно) быть необходимым. –

+2

Спасибо за ваше редактирование @Tom. –

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