Как вы обнаруживаете «слово» в строке, которая содержит буквы и цифры? - PullRequest
2 голосов
/ 27 января 2011

Мне нужно регулярное выражение, которое обнаруживает "слово" в строке, которая содержит буквы и цифры и имеет определенную длину, например, 812d555c726d10c77b05cd164705665a. Цель состоит в том, чтобы обнаружить строки, содержащие дайджесты sha1.

Если только регулярные выражения слишком сложны, решение Ruby в порядке.

Ответы [ 4 ]

5 голосов
/ 27 января 2011

Это должно сделать это:

valid_sha1 = !((str =~ /\b[a-f0-9]{32,}\b/i).nil?)
2 голосов
/ 27 января 2011

Вы можете использовать следующее регулярное выражение.

s =~ /^[a-f0-9]{32,32}$/i
1 голос
/ 27 января 2011

Оба других ответа требуют, чтобы строка начиналась с SHA1. Если sha1 может быть где-нибудь в строке, удалите ^

/[a-f0-9]{32}/i

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

0 голосов
/ 27 января 2011

Если вы действительно хотите, чтобы слово состояло из ОБА букв и цифр (как вы спрашивали выше), то вы можете использовать положительный прогноз:

sha_array = line.scan(/(?=.{0,31}\d)(?=.{0,31}[a-f])\b[\da-f]{32}\b/i)

(?= проверяет условие заранее, ничего не потребляя.

...