2014-10-10 80 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+)/' 

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

这没有正确测试。