2012-04-28 3 views
0

У меня есть текст: (PRD: ТЛК-XX138832)Не удалось получить спичку, регулярное выражение

Однако я не могу показаться, чтобы получить спичкой и скобки вызывают проблемы. Я новичок в регулярном выражении и несколько раз пытался попробовать матч неудачно.

Я думал, что это будет работать, но не имеет: \(PRD:[.]\)

Является ли мое понимание . неправильно?

Я также пробовал [a-zA-Z0-9\-], но это тоже не работает, а также несколько других комбинаций?

(ТЛК-XX138832 может быть что угодно, до тех пор, как это имеет ПДР:. И кронштейны)

ответ

3

Да, ваше понимание . кажется неправильным. Это особый символ, который интерпретируется как «любой символ». За исключением класса символов (в квадратных скобках), где это означает «просто символ .».

Правильное регулярное выражение для того, что вы хотите, может быть:

\(PRD:[^)]*\) 

Здесь [^)] является классом символов означает «любой символ, кроме )».

То, что вы действительно пытались сделать, это:

\(PRD:.*\) 

Но он может соответствовать слишком много, к примеру, что может соответствовать:

(PRD:FOO) (PRD:BAR) 

Поскольку * жаден (он пытается соответствовать как можно больше).

Если ваш движок регулярных выражений поддерживает это, вы могли бы попробовать (немного более удобный для чтения), не жадный вариант:

\(PRD:.*?\) 

который функционально эквивалентен первым решением.

+0

Что делает дополнительный кронштейн в [^)]? – Erbilacx

+0

zero0cool: нет, это было бы неправильно. – ddaa

+0

Это сработало, спасибо и дал мне лучшее понимание – Erbilacx

0

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

Использование:

\(PRD:[A-Z0-9-]*\) 
Смежные вопросы