2011-03-16 83 views
0

我試圖寫一個正則表達式來過濾掉只包含瑞典字母,連字符和單個空格的字符串 - 也就是說,不是連續兩個。我有這個preg_match('/^[A-ZÅÄÖa-zåäö-]+\s{1}$/',$b),我覺得我已經嘗試了一百種不同的模型,但它不起作用。我怎麼做到這一點?正則表達式來檢查連續空格

+0

給出匹配的句子和不應該匹配的句子的例子 – Moak

+0

我想我可以幫忙,但是我不知道你想匹配什麼。你能解釋(並舉例說明)*匹配的字符串和*匹配的字符串嗎? – riwalk

+0

這與問題無關,但如果源(和文本)使用UTF-8,則應該使用「u」開關使其正常工作。 – Artefact2

回答

0

往往是解決這樣一個問題拆分爲獨立的正則表達式檢查的最佳途徑。

  • 檢查字符串只包含您想要的字母(和空格)
  • 如果第一個檢查通過,檢查它不具有兩個或多個連續的空格

嘗試:

if (preg_match('/^[A-ZÅÄÖa-zåäö-\s]$/',$b) && !preg_match('/\s\s+/', $b)) { 
    /... 
} 
+0

謝謝,這工作:)但我得到了另一個答案,在一個表達式中管理它。 – fredrikekelund

+0

但我會給你這個反正:) – fredrikekelund

1

多個空格(兩個或更多)是{2,}所以嘗試用它替換您的{1}並再次運行它。

+0

他說他*不想匹配2個空格。 – eykanal

+0

@eykanal,我認爲真正的問題是沒有人知道他想要匹配什麼......我甚至不知道他是否知道他想匹配什麼,因此困難:) – riwalk

+0

對不起,但我認爲你應該重新閱讀正則表達式的作用,並且考慮一個空間,而不是兩個或更多。而且,對涉及計算機的任何事情來說,否定都是微不足道的操作。 – Furicane

0

現在,您的正則表達式會查找包含這些字符和單個空格的單詞。如果你正在尋找一種方式來捕捉的東西像[word][single space][word][single space],你可能想嘗試

/^([A-ZÅÄÖa-zåäö-]+\s{1}?)+$/ 
+0

對不起,我應該更清楚了,謝謝你的回答,但是這並不是我真正想要的對於 – fredrikekelund

0

我得到了非常完美的答案,但它消失了......總之,這段代碼做的伎倆!preg_match('/^(?:[a-zåäö-]+|\s(?!\s))+$/i',$b)