Проверка строк файла на соответствие регулярному выражению - PullRequest
0 голосов
/ 30 января 2012

Я использую метод Regex.Match, чтобы найти номер кредитной карты в файле (для соответствия PCI)

Я перебираю строки (strLine) файла и проверяю каждую на соответствие регулярному выражению (m_strRegEx):

Regex.Match(strLine, m_strRegEx)

string strLine = "4111111111111111"

Это работает нормально, но если строка содержит другие символы, например, strLine может =:

string strLine = "fhj*4111111111111111op)"

Регулярное выражение не поднимает номер куба,Как можно было бы преодолеть эту проблему?

Я использую регулярное выражение:

^4[0-9]{12}(?:[0-9]{3})?$

Ответы [ 3 ]

5 голосов
/ 30 января 2012

Это потому, что ваше регулярное выражение привязано к началу и концу строки с ^ и $.Это означает, что вся строка должна соответствовать вашему регулярному выражению, а не только подстроке.

Удалите ^ и $ из регулярного выражения, чтобы выполнить сопоставление подстроки:

4[0-9]{12}(?:[0-9]{3})?

Быстрый тест:

PS> 'fhj*4111111111111111op)' -match '4[0-9]{12}(?:[0-9]{3})?'; $Matches
True

Name                           Value
----                           -----
0                              4111111111111111
4 голосов
/ 30 января 2012

Поскольку ваше регулярное выражение начинается с ^ и заканчивается $, это означает, что совпадение должно быть от начала до конца строки. Просто удалите эти символы из вашего шаблона регулярных выражений, и он должен работать так, как вам нужно.

1 голос
/ 30 января 2012

Вы должны снять якоря:

4[0-9]{12}(?:[0-9]{3})?
...