Обнаружение пакетов с помощью регулярных выражений - PullRequest
0 голосов
/ 12 ноября 2009

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

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

Какой самый эффективный способ игнорировать данные между началом и концом?

Вот простой пример. Пакет, который я ищу, начинается с $ CH; и заканчивается #

В настоящее время мое регулярное выражение \$CH;.*?#

Это. *? Я волнуюсь о. Есть ли лучший (или более эффективный) способ принять любой символ между заголовком пакета и конечным символом?

Кроме того, некоторые пакеты имеют \ n символов в данных, поэтому используйте. не будет работать вообще, если это означает [^ \ n].

Я также рассмотрел [^\x00]*? для обнаружения любых символов, поскольку в данных никогда не используется ноль.

Есть предложения?

Ответы [ 4 ]

4 голосов
/ 12 ноября 2009

\$CH;.*?# хорошо и должно быть достаточно эффективным. Вы можете сделать это более явным, что не должно быть возврата, написав его как \$CH;[^#]*#, если хотите.

Вы можете использовать (.|\n) или [\w\W], чтобы действительно соответствовать любому символу - или даже лучше, использовать опцию RegexOptions.Singleline , чтобы изменить поведение .:

Указывает однострочный режим. Изменяет значение точки (.), чтобы она соответствовала каждому символу (вместо каждого символа, кроме \n).

1 голос
/ 12 ноября 2009

Для определения начала строки / данных используйте ^ привязку, для определения конца используйте $ привязку:

^start.*?end$

Имейте в виду, что .*? может не соответствовать символам новой строки, один из вариантов - изменить его на [\s\S]*?

1 голос
/ 12 ноября 2009

Попробуйте это:

\$CH;[\s\S]*?#
0 голосов
/ 12 ноября 2009

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

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