Захватить строку, пока первый знак каретки не попадет в регулярное выражение? - PullRequest
0 голосов
/ 07 января 2009

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

С этой строкой, как я могу вернуть "Active" в обратной ссылке и поисковом запросе, останавливаясь, когда он попадает в первую каретку (^) ?:

Active^20080505^900^LT^100

Можно ли сделать это с включением в регулярное выражение этого "(.+)"? Причина, по которой я спрашиваю, заключается в том, что фактическое регулярное выражение "(.+)" определено в базе данных как разделение этих сообщений, и связанные с ними правила могут быть установлены из внешней системы. Содержимое может быть любым (в данном случае «Активным»), поэтому в этом случае использовалось «. +».

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

Если у вас есть лучшее предложение, чем «(.+)», будем рады его услышать.

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 07 января 2009
(.+?)\^

Должен схватиться до первого ^

Если вам нужно включить (.+) без изменений, вы можете использовать это:

(.+?)\^(.+)

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

1 голос
/ 07 января 2009

Регулярное выражение здесь действительно излишне.

Просто возьмите первые n символов строки, где n - позиция первой каретки.

Псевдокод:

InputString.Left(InputString.IndexOf("^"))
0 голосов
/ 07 января 2009
^([^\^]+)

Это должно работать, если ваша библиотека RE не поддерживает нежадность.

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