Как я могу упростить это регулярное выражение? - PullRequest
2 голосов
/ 03 февраля 2012

Формат, который я пытаюсь найти:

# (Apple push notification codes)
"11a735e9 9f696c2f 700b2700 728042c6 137eeb7a 8442c27d 40e59d9e 3c7e0de7"

Самое простое выражение, которое я могу придумать: /((\w{8}\s){7}\w{8})/i

Кто-нибудь может подумать о более простом?

(я использую регулярные выражения Ruby)

ОБНОВЛЕНИЕ - благодаря пользователю 1096188 я удалил \ d - это включено в \ w

Ответы [ 4 ]

3 голосов
/ 03 февраля 2012

Вы можете определить границу слова, используя \b, и использовать (?: для предотвращения захвата групп

/(?:\w{8}\b\s?){8}/
2 голосов
/ 03 февраля 2012

Вы можете сделать это, если конец совпадения является концом всей строки.(\w{8}(:?\s|$)){7}

0 голосов
/ 03 февраля 2012

Взяв решение @ zapthedingbat на одну ступень дальше, похоже, код содержит только шестнадцатеричные символы (0-9 и af) и пробелы.Так что вы могли бы пожертвовать небольшой простотой ради точности.

Я делаю предположение, но я подозреваю, что буквы от g до z недействительны.Если формат только шестнадцатеричный (вы должны проверить документацию Apple, чтобы убедиться), более точное совпадение будет:

/(?:[0-9a-f]{8}\b\s?){8}/

РЕДАКТИРОВАТЬ

Фактически, в RubyПохоже, вы должны быть в состоянии сделать:

/(?:\h{8}\b\s?){8}/
0 голосов
/ 03 февраля 2012
> "11a735e9 9f696c2f 700b2700 728042c6 137eeb7a 8442c27d 40e59d9e 3c7e0de7".match(/((\w{8}\s)+)/)
> $&
 => "11a735e9 9f696c2f 700b2700 728042c6 137eeb7a 8442c27d 40e59d9e 3c7e0de7"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...