2013-07-22 2 views
0

Мне нужна помощь в создании регулярного выражения в приложении ColdFusion. Прошу прощения, если это было задано. Я искал, но я не могу просить о правильной вещи.Соответствие регулярному выражению ColdFusion для цифр точной длины

Я использую следующие данные для поиска строки темы электронной почты для номера выпуска:

reMatchNoCase("[0-9]{5}", mailCheck.subject) 

Номер выпуска содержит только числовые значения, и должно быть ровно 5 цифр. Это работает, за исключением случаев, когда у меня есть более длинное число, которое появляется в строке, например 34512345. Оно также принимает первые 5 цифр этой строки как действительный номер проблемы.

Я хочу получить только 5-значные цифры, ничего короче или дольше. Затем я помещаю их в список, который должен быть зациклен и обработан. Возможно, мне нужно включить пробелы до и после в регулярном выражении, чтобы получить желаемый результат?

спасибо.

ответ

6

Общий способ исключить контент из списка до/после матча - использовать негативный lookbehind перед матчем и отрицательный результат. Для того, чтобы сделать это для числовых цифр будет:

(?<!\d)\d{5}(?!\d) 

(где \d является сокращением для [0-9]) регулярное выражение

CF поддерживает lookaheads, но, к сожалению, не просмотра назад, так что не будет работать непосредственно в реванше - однако что, вероятно, не имеет значения в данном случае, потому что это, вероятно, что вы не хотите, например, abc12345, чтобы соответствовать либо - так что вы, скорее всего хотите:

\b\d{5}\b 

Где \b - это «граница слов» - грубо говоря, он проверяет изменение между «символом слова» и символом не-слова (или наоборот) - поэтому в этом случае первый \b будет проверять, что нет ни одного из [a-zA-Z0-9_] до первая цифра, а вторая \b будет проверять, что после пятой цифры нет. A \b не добавляет никаких символов в соответствие (т. Е. Это утверждение с нулевой шириной).

Поскольку вы не имеет дело с делом, вам не нужен переменная NoCase и можете просто написать:

rematch('\b\d{5}\b' , mailCheck.subject) 

В пользу этого более простая проверки для пространств является то, что в результате пяти цифр (нет необходимости обрезать), но недостатком является то, что он будет соответствовать таким значениям, как [12345] или 3.14159^2, которые, вероятно, не то, что вы хотите?

Для проверки пространств, или начало/конец строки, вы можете сделать:

rematch('(?:^|)\d{5}(?= |$)' , mailCheck.subject) 

Затем используйте trim на каждый результат, чтобы удалить пробелы.

Если это не то, что вам нужно, продолжайте и дайте более подробную информацию.

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

  • Нет связанных вопросов^_^