Regex с текстом с разделителями табуляции, содержащим \ x09 - PullRequest
0 голосов
/ 24 октября 2009

У меня сложный вопрос.

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

Мое регулярное выражение выглядит так:

^([\w ]+)\t(\d*)\t(\d+)\t([^\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

Однако проблема в том, что в моем исходном тексте шестое поле содержит строку регулярного выражения. Следовательно, он может содержать \ x09, что, естественно, взрывает регулярное выражение, так как оно также рассматривается как вкладка.

Есть ли способ сказать движку регулярных выражений: "Совпадение по \ t, но не по тексту \ x09". Я думаю, нет, так как они одно и то же.

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

Ответы [ 2 ]

0 голосов
/ 24 октября 2009

Похоже, проблема с контрольным примером. В регулярном выражении могут быть вкладки, но в приведенном выше примере нет. Ваша строка в 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 (вкладка).

0 голосов
/ 24 октября 2009

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

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