似乎我无法理解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}
之间的区别。这似乎是一个非常基本的误解。
答案 0 :(得分:2)
[\b]
是character class,仅与backspace char(\u0008
)匹配。
请注意
中的退格符"\b"
具有不同的含义,即字符类
此外,.{1}
= .
,{1}
limiting quantifier始终是多余的,只有在您的模式是根据变量动态构建时才有意义。