复杂的正则表达式场景

时间:2014-05-18 17:17:13

标签: php regex preg-match

我有一个场景,我有多个具有相似标题的项目,需要简化标题,以便它们各自具有相同的标题。

以下是可能的变化:

   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

匹配的结果最好是#34; vs。耶鲁(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)

1 个答案:

答案 0 :(得分:3)

似乎没有共同点。如果是这种情况,您需要一个清单。

我认为你需要考虑可能是各种短语的起点,这些短语会被认为是多余的。以下正则表达式适用于您的示例;但它是否可以推广到你的真实数据还有待观察。我用了交替。如果可以有两个以上,您可能需要在列表中添加Third,Fourth等。

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

使用过类似的东西:

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

请注意,我使用了不区分大小写的模式;并且您还希望点与不匹配换行符。