PHP正则表达式匹配多个部分

时间:2014-10-10 12:18:07

标签: php regex

我是regex的新手,我知道如何从给定字符串中提取一个子字符串的基础知识,但我正在努力找出我需要的多个部分。我想知道是否有人可以帮助我这个简单的例子然后我从那里开始工作。拿这个字符串:

  

LMJ 赢了 Neu 区域 KEN 55 LEIGH vs LMJ 63 ONEIL

斜体的部分是字符串中将改变的部分,粗体在每个字符串中保持不变。我需要的部分是:

  1. 第一个团队ID,在这种情况下是LMJ,这将始终是字符串并且是3个大写字母,^[A-Z]{3}

  2. Neu部分可以是3个字符串之一,NeuOffDef[Neu|Off|Def]

  3. 第二个小组部分将始终位于Zone -[A-Z]{3}之后?

  4. 在第一个#之后需要字符串的数字部分。这可能是1或2位[0-9]{1,2}

  5. 5.除了vs[A-Z]{3}之后出现的第三个团队部分与3个相同?

    1. 与第2个#[0-9]{1,2}之后需要数字部分相同?
    2. 我想把所有这些都归结为一个正则表达式是可能的吗?

2 个答案:

答案 0 :(得分:2)

方括号内的所有内容都是所谓的字符类:它只匹配一个字符。因此,[Neu|Off|Def]表示:Neu|Of或其中一个字符D(重复被忽略)

你想要的是一个捕获组:(Neu|Off|Def)

把它放在一起:

^([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"部分不感兴趣,并且这些部分始终为大写字母)

答案 1 :(得分: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+)/' 

()用于捕获不同的部分。

未经正确测试。