2010-01-21 4 views
1

Я думал в обеспечении следующего регулярного выражения в качестве ответа на this question, но я не могу написать регулярное выражение, которое я искал:Regex - Одинаковые Сокращения Слово

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

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

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

  • слово
  • wrdp
  • пресс
  • wordp
  • wpress
  • WordPress

Я хотел бы знать, что это лучший способ сделать это. .. =)

ответ

5

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

^(?=.{4})w?o?r?d?p?r?e?s?s?$ 
+0

Кажется, что аббревиатуры выходят из строя, как 'wodr'. –

+0

Аликс не совсем ясно, какие аббревиатуры в порядке, а какие нет: почему 'wrdp' да и' wodr' нет? –

+0

@ kemp: Извините, они оба должны быть в порядке, потому что 'r' появляется дважды. 'wodw', этого не следует сопоставлять. Извините за путаницу. –

2
if (strlen($string) >= 4 && preg_match('#^w?o?r?d?p?r?e?s?s?$#', $string)) { 
    // abbreviation ok 
} 

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

0

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

#!/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") 
Смежные вопросы