Regex - соответствующие сокращения слова - PullRequest
1 голос
/ 21 января 2010

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

w?o?r?d?p?r?e?s?s?

Это должно соответствовать упорядоченной аббревиатуре слова wordpress, но оно также может вообще ничего не соответствовать.

Как я могу изменить приведенное выше регулярное выражение, чтобы оно соответствовало как минимум 4 символам в порядке ? Как:

  • слово
  • wrdp
  • нажмите
  • wordp
  • wpress
  • 1024 * WordPress *

Я бы хотел знать, как лучше всего это сделать ... =)

Ответы [ 4 ]

5 голосов
/ 21 января 2010

Вы можете использовать утверждение предпросмотра:

^(?=.{4})w?o?r?d?p?r?e?s?s?$
2 голосов
/ 21 января 2010
if ( strlen($string) >= 4 && preg_match('#^w?o?r?d?p?r?e?s?s?$#', $string) ) {
    // abbreviation ok
}

Это даже не запустит регулярное выражение, если длина строки не менее 4 символов.

2 голосов
/ 21 января 2010

Как насчет функций проверки сходства php?

0 голосов
/ 21 января 2010

я знаю, что это не регулярное выражение, просто для удовольствия ...

#!/usr/bin/python

FULLWORD = "wordprocess"

def check_word(word):
    i, j = 0, 0
    while i < len(word) and j < len(FULLWORD):
        if word[i] == FULLWORD[j]:
            i += 1; j += 1
        else:
            j += 1

    if j >= len(FULLWORD) or i < 4 or i >= len(FULLWORD):
        return "%s: FAIL" % word
    return "%s: SUCC" % word

print check_word("wd")
print check_word("wdps")
print check_word("wsdp")
print check_word("wordprocessr")
...