Регулярное выражение для подсчета количества% или = или: в строке любой длины - PullRequest
0 голосов
/ 27 декабря 2011

Я ищу помощь в создании регулярного выражения, которое определяет количество (или более) символов «%» или «=» или «:» в строке любой длины.

До сих пор я проверял следующие источники, но не мог приспособить то, что было опубликовано, к моим потребностям:

Кроме того, я сам попробовал следующие выражения, но они не соответствуют моимстрока.(Я использовал «pcretest» для проверки совпадений)

  • /[%=:]{10,}/
  • /[a-zA-Z0-9](:|%|=){10,}/

Может ли кто-нибудь помочь?

Ответы [ 5 ]

2 голосов
/ 27 декабря 2011

Это регулярное выражение будет соответствовать, если строка содержит 10 (или более) символов: %=: с любым количеством других символов между:

/(?:[^%=:]*[%=:]){10}/

Если вам нужно сопоставить всю строку, содержащую не менее 10, используйте эту строку:

/^(?:[^%=:]*[%=:]){10}[\S\s]*$/

Вы не сказали, должны ли они быть последовательными . Этот ответ предполагает нет.

1 голос
/ 27 декабря 2011
cnt = 0
for each character in string:
    if character is '%' or ':' or '=':
        cnt++

    if cnt >= 10: # or 100 or 1000
        SUCCESS
        break
1 голос
/ 27 декабря 2011

...

как насчет:

/[%=:]{1000,}/

?

0 голосов
/ 27 декабря 2011

Это будет зависеть от того, какой механизм регулярных выражений вы используете, но это должно работать:

/([%:=][^%:=]*){10,}/

В зависимости от вашего языка программирования вам может потребоваться экранировать скобки и скобки с начальным обратным слешем (например, /\([%:=][^%:=]*\)\{10,\}/).

Это будет соответствовать одному из выбранных вами символов {'%', ':', '='}, за которым, возможно, любое количество символов, не входящих в этот набор, десять или более раз

0 голосов
/ 27 декабря 2011

Рассчитайте длину вашего ввода.

Затем есть другая переменная, которая является входом, где вы глобально заменили [%=:]+ на ничто.

Рассчитайте длину этой переменной, сравните с длиной ввода: если разница составляет 100 или более, у вас есть совпадение;)

...