preg - 带 [] 和不带 [] 的搜索模式之间的区别

preg - Difference between Search Patterns with [] and without

我似乎无法理解 PHP 中 preg 正则表达式模式的一些非常基本的东西。

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

Pattern 应该以单词边界开头,但为什么我把它放在 []{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 为我提供名称开头有断字的所有赛车手。 (在这个例子中是舒伯特、罗申巴赫、斯宾纳)但当然不是斯特罗因斯基。所以,我试试这个:

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

无效。即使我删除 0-9 并只将 [\b]{1} 放在开头,它也找不到任何匹配项。

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

[\b]character class that only matches a backspace char (\u0008).

PHP regex reference:

note that "\b" has a different meaning, namely the backspace character, inside a character class

此外,.{1} = .{1} limiting quantifier 总是多余的,只有当你的模式是从变量动态构建时才有意义。