2009-12-03 40 views
4

我不完全是一個正則表達式大師,所以我有一些困難找到一個正則表達式爲下面的情況。正則表達式的最大長度是否包含必需部分的字符串?

我想匹配形式<prefix>$rolename$<suffix>(例如abc$rolename$def),其具有的兩個20和<prefix><suffix>最大長度可以是空的,並且可以包含任何字符的字符串。 $rolename$部分是必需的。

應該不是很困難,但我只是無法弄清楚如何做到這一點。誰能幫我?

回答

6

既然你已經使用正則表達式,爲你解釋,這裏有一個選項:

^(?!.{21,})(.*?)\$rolename\$(.*?)$ 

這與勒夫的回答,但一開始負前瞻。也就是說:在正則表達式匹配之前,我們檢查字符串沒有21個或更多字符。

+0

這正是我想要的,謝謝。我只是想知道爲什麼你需要(。*?)而不是(。*)圍繞$ rolename $。 – 2009-12-03 12:17:00

+1

這是一個非貪婪的捕獲。我沒有測試過演出,但應該會好一點。當它找到'$ rolename $'時應該停止,而不是繼續直到結束,失敗和回溯。 – Kobi 2009-12-03 12:20:07

+1

試想想它,'(?!{} 21)'會的工作一樣的,也是'(?=。{1,20} $)'如果你是一個樂觀主義者:) – Kobi 2009-12-03 12:25:50

1

正則表達式我最好使用將是/^([^\$]*)\$rolename\$([^\$]*)$/,驗證串的總長度在外部。

+0

聽起來沒錯。我不確定你需要在字符組中擺脫美元 - '[^ $]'可能會做。我會補充說,你想先測試長度,在正則表達式之前。它便宜得多。 – Kobi 2009-12-03 10:51:16

+0

在我的情況下,不可能從外部驗證字符串長度。我想驗證用戶界面中的輸入字段。生成輸入字段及其驗證碼(正則表達式驗證)。我無法更改此代碼的生成。 – 2009-12-03 11:05:49

+0

@rwwilden - 我爲你添加了一個選項,但它很醜。允許您控制正則表達式驗證是很奇怪的,但不是最大長度。這是非常常見的文本框... – Kobi 2009-12-03 11:46:12

-1

爲什麼正則表達式?認爲簡單。根據您的語言,請使用您的語言的字符串長度的方法長度如使用Python

if len(mystring) <= 20: 
    if "$rolename" in mystring: 
     print "ok" 

你的語言可能有類似的方法,如指數()找到其中一個子是一個字符串。

+0

我真的需要一個正則表達式。如果問題很簡單,我不會問:)另請參閱我對Joachim Rendeiro的回答的評論。 – 2009-12-03 11:07:39

+0

那麼你應該在發佈我們的問題時說明這一點。 – ghostdog74 2009-12-03 11:08:33

相關問題