2014-10-10 76 views
-1

我是新來的正則表達式,我知道如何從一個給定的字符串中拉出一個子字符串的基礎知識,但我掙扎着走出我需要的多個部分。我想知道是否有人可以幫助我這個簡單的例子,然後我從那裏工作。把這個字符串:PHP的正則表達式匹配多個部分

LMJ贏得NEU區 -KENLEIGH VS LMJ奧尼爾

斜體部分是字符串,這將改變和大膽的將保持相同的部分在每個字符串中。我需要出去的部分是:

  1. 一線隊ID在這種情況下是LMJ,這將始終啓動串並3個大寫字母,^[A-Z]{3}

  2. 這可能是3串,NeuOffDef[Neu|Off|Def]之一的NEU一部分?

  3. 第二隊總是會出現在Zone -,[A-Z]{3}之後?

  4. 需要在第一個#之後的字符串的數字部分。這可能是1或2位[0-9]{1,2}

5.Third隊部分相同,3除了將vs[A-Z]{3}後出現?

  1. 與4需要數字部分後相同#[0-9]{1,2}

我想把這一切放到一個正則表達式中是可能的嗎?

回答

2

方括號內的所有內容都是所謂的字符類:它只匹配單個字符。所以,[Neu|Off|Def]表示:(Neu|Off|Def)

將其組合在一起:Neu|OfD(重複被忽略)字符

你想要的是一個捕獲組中只有一個

^([A-Z]{3}) won (Neu|Off|Def)\. Zone - ([A-Z]{3}) #([0-9]{1,2}) [A-Z]+ vs ([A-Z]{3}) #([0-9]{1,2}) [A-Z]+$ 

(這裏假定您對「LEIGH」和「ONEIL」零件不感興趣,並且這些零件總是以大寫字母表示)

+0

謝謝Roel。在我嘗試過的幾個例子上完美工作。試着用這個例子來創建更多的正則表達式字符串。 – ninedoors 2014-10-10 12:37:35

+0

別忘了查看http://regex101.com/ – 2014-10-10 12:45:30

0

正則表達式應該類似於;

'/([A-Z]{3})\ won\ (Neu|Off|Def)\.\ Zone\ -\ ([A-Z]{3})\ (\#[0-9]{1,2}\ \w+)\ vs\ ([A-Z]{3})\ (\#[0-9]{1,2}\ \w+)/' 

()用於捕獲不同的部分。

這沒有正確測試。