2012-04-05 232 views
-1

我有以下數據:

ABC DEF; GHI。

此正則表達式匹配:

([a-z0-9A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ ]*)\W (.*)((\w\.))? 

此正則表達式也將匹配

([a-z0-9A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ ]*)\W (.*)$ 

我還是很新的正則表達式的,但我想|代表OR,()分組和?代表0或1次發生。所以我認爲在組合上述查詢時它仍然會匹配。然而以下將不匹配:

([a-z0-9A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ ]*)\W (.*)((\w\.))|$ 

我在做什麼錯了?

ps。 我正在使用以下測試我的正則表達式。 http://regexpal.com/

編輯: 我沒有使用的代碼標籤,這樣一個角色消失

EDIT2: 什麼我想匹配的是下面的數據將是一個名字。 所以「abc def」就是姓氏。 ghi的稱呼(英語不是我的母語,是否像正確的詞的正確術語?)。然而,可能是名字的第一個字母。這就是爲什麼它應該是該行的結尾或該信。

當存在涉及將第一名稱的數據:

ABC; DEF。 G.

+0

我在第二個正則表達式中找不到匹配 - 你能檢查嗎? – PinnyM 2012-04-05 16:47:12

+0

同樣在這裏。你想匹配什麼部分的字符串?那部分不清楚。 – Squazic 2012-04-05 16:49:17

+2

$表示「字符串的結尾」。所以你最後的正則表達式不太合理。你已經編碼了「(long-pattern)」或「字符串的末尾」。 – 2012-04-05 16:50:24

回答

1

運算符優先級爲|操作員有點棘手。將其兩個操作數明確地包裝在圓括號中通常是個好主意。 另外,注意將空格插入到正則表達式中。看起來你想在\ w中匹配一個文字週期。片段,以匹配「G」。

所以我想你想的組合表達什麼是一樣的東西

((.*)((\w\.))?)|(.*)$ 

但自從?是指0或更多,因爲你已經學會了,這可以被改寫爲

(.*)((\w\.))?)$ 

而且,爲了增加表達式的休息回來,我們有

^[a-z0-9A-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ ]*)\W (.*)((\w\.))?)$ 

而且,是的,「敬禮」或「問候」對於「先生」,「女士」,「博士」等來說是個好詞。

+0

在我做出正確的表達之後: ([a-z0-9A-ZAÁ'AÇÈÉÊËÌÍÏÒÓÔÕÖÙÚÛâÝàāçãéêëìíîïðòóôõöùúûüýÿ*] \ W(。*)((\ w \ ))?$ 它似乎在工作。 – Boelensman1 2012-04-05 17:40:27