preg - 使用[]和不使用搜索模式之间的差异

时间:2018-04-20 07:17:23

标签: php regex preg-match

似乎我无法理解PHP中preg regex模式的基本内容。

这些正则表达式之间有什么区别:

  • \b([A-Z...]...)
  • [\b]{1}([A-Z...]...)

模式应该从一个单词边界开始,但是当我把它放在[]{1}时,为什么结果会有所不同? 第一个像我预期的那样工作,但第二个没有。问题是,我想在[]中添加更多内容,以便模式可以以字边界或小字符[a-z]开头。

谢谢!

示例文字:

Race1529/05/201512:45K4 Senior Men 1000m
LaneName(s)NFBib(s)TimeRank250m500m750m
152
Martin SCHUBERT / Lukas REUSCHENBACH155
11
153
151Kostja STROINSKI / Kai SPENNER
03:07.740
GER
8

我想找到赛车手的名字。有时他们在开头有一个分词(\b),有时不是。 (但我需要断字。)

$pattern = '#\b(['.$GB.$KB.'\s\-]{2,40})\s(['.$GB.'\'\-\s]{2,40})[0-9]{0,5}#';  

$GB是一个包含所有大写字母的变量,$KB包含小写字母)

preg_match_all给了我所有名人在开头就有一个分词的赛车手。 (在这个例子中舒伯特,Reuschenbach,Spenner)但当然不是Stroinski。所以,我试试这个:

$pattern = '#[\b0-9]+(['.$GB.$KB.'\s\-]{2,40})\s(['.$GB.'\'\-\s]{2,40})[0-9]{0,5}#';        

不起作用。即使我删除了0-9并且只在开头放了[\ b] {1}它也没有找到任何命中。

我没有看到\b[\b]{1}之间的区别。这似乎是一个非常基本的误解。

1 个答案:

答案 0 :(得分:2)

[\b]character class,仅与backspace char\u0008)匹配。

请参阅PHP regex reference

  

请注意"\b"具有不同的含义,即字符类

中的退格符

此外,.{1} = .{1} limiting quantifier始终是多余的,只有在您的模式是根据变量动态构建时才有意义。