2014-05-18 162 views
0

我有一個場景,我有多個具有相似標題的項目,需要簡化標題,以便它們每個都具有相同的清單標題。複雜的正則表達式場景

下面是可能的變型:

Quarter Final Football vs. Loyola #2 -- 46:00 
    Quarter Final Football vs. Loyola #1 -- 32:00 
    Little Shop Act II -- 39:30 -- 5/22/91 
    Little Shop Act I -- 56:15 -- 5/22/91 
    B-BALL -- 3/14/86 -- vs. King -- First Half -- 43:15 
    B-BALL -- 3/14/86 -- vs. King -- Second Half -- 48:15 
    Oak Park 9/26/70 Part 1 
    Oak Park 9/26/70 Part 2 
    vs. Yale (1958) First Period 
    vs. Yale (1958) Second Period 

匹配結果理想地「與耶魯(1958)」爲底部的兩個。 我試圖用這個正則表達式模式的底部字符串,但我有點失落,以至於如何以編程方式處理所有這些變化。

([.,a-zA-Z0-9\s\(\)]*)\b([#]|Period|period)\b 

感謝您的任何指示或幫助。

編輯: 輸出爲每個變種的

Quarter Final Football vs. Loyola 
Quarter Final Football vs. Loyola 
Little Shop 
Little Shop 
B-BALL -- 3/14/86 -- vs. King 
B-BALL -- 3/14/86 -- vs. King 
Oak Park 9/26/70 
Oak Park 9/26/70 
vs. Yale (1958) 
vs. Yale (1958) 
+0

總是會有兩個匹配的標題嗎?或者它可能超過2? – user184994

+0

它可能超過兩個。 – egekhter

+0

你能告訴我們每個變體的示例輸出嗎? – Sam

回答

3

似乎有不是一個共同點。如果是這樣,你需要一個列表。

我認爲你需要考慮什麼可能是開始的各種短語,將被視爲超量。以下正則表達式適用於您的示例;但是否可以推廣到您的真實數據還有待觀察。我使用了交替。如果可能有兩個以上,則可能需要將第三,第四等添加到列表中。

\s*(?:#|act|(?:--)?\s*(?:First|Second)|Part).* 

二手也許是這樣的:

$result = preg_replace('/\s*(?:#|act|(?:--)?\s*(?:First|Second)|Part).*/i', '', $subject); 

請注意,我用的是不區分大小寫的模式;而且你也希望點不匹配換行符。

+0

該解決方案效果很好!我想建議創建一個可能的變體陣列,並基於該列表動態地創建正則表達式。 – egekhter

+0

@egekhter很高興幫助。在創建變體時,需要注意其中一個變體並不巧合地出現在您希望保留的部分中。 –

+0

這讓我想起了......感謝您的幫助。 – egekhter