2009-10-23 2 views
0

У меня жесткий.Регулярное выражение с разделителем табуляции, содержащим x09

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

Моя регулярное выражение выглядит следующим образом:

^([\w ]+)\t(\d*)\t(\d+)\t([^\t]+)\t([^\t]+)\t([^\t]+)\t([^\t]+)$ 

и пример текста источника (вкладки преобразуются в \ т для ясности):

JJ\t345\t0\tTest\tSome test text\tmore text: pcre:"/\x20\x62\x3b\x0a\x09\x61\x2e\x53\x74\x61\x72/"\tNone 

Однако, проблема заключается в том, что в моем исходном тексте, 6-е поле содержит строку регулярных выражений. Поэтому он может содержать \ x09, который, естественно, взрывает регулярное выражение, так как он рассматривается как вкладка.

Есть ли способ сообщить движку регулярных выражений «Матч по \ т, но не по тексту \ x09». Я думаю, что нет, так как они - одно и то же.

Если нет, есть ли какой-либо символ, который можно было бы безопасно использовать для разграничения текста, содержащего строку регулярных выражений?

+1

Всегда указывайте, какой движок и язык вы используете. (даже если я полагаю, что вы работаете на ПК, учитывая ваш образец) Детали и недостатки Regexp сильно отличаются от одного движка (и языка) к другому. – ZJR

+0

Использование встроенного класса Pattern и Matcher в Java 1.4.2 – wadesworld

ответ

0

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

+0

Это было отличное решение проблемы. – wadesworld

0

Кажется, проблема с тестовым чехлом. Регулярное выражение может иметь вкладки в нем, но ваш пример выше не делает. Ваша строка в Java будет выглядеть следующим образом:

String testString = "JJ\t345\t0\tTest\tSome test text\tmore text: pcre:"/\\x20\\x62\\x3b\\x0a\\x09\\x61\\x2e\\x53\\x74\\x61\\x72/"\tNone"; 

Если вы посмотрите на эту строку в отладчике вы будете иметь \ x09, как 4-х символов, а не как 1 (вкладка).

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