2010-01-21 19 views
1

我想提供以下的正則表達式作爲一個答案this question,但我似乎不能寫的正則表達式我一直在尋找:正則表達式 - 匹配縮寫一句話

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'這樣的縮寫。 – 2010-01-21 15:12:54

+0

Alix它不完全清楚什麼縮寫是好的,哪些不是:爲什麼'wrdp'是和'wodr'否? – 2010-01-21 15:16:09

+0

@kemp:對不起,他們都應該沒問題,因爲'r'出現了兩次。 'wodw'這個不應該匹配。對困惑感到抱歉。 – 2010-01-21 15:18:50

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")