如何通过".net"
模式检测preg_match_all
开头的点,以便也可以从echo ".net"
列表中的$skills
以及其他关键字开始?
$skill = array(".net","software framework","microsoft");
$text = ".NET Framework is a software framework developed by Microsoft";
foreach ($skill as $skills) {
preg_match_all("~\b$skills\b~i", $text, $matchWords);
foreach ($matchWords[0] as $matchWord) {
echo "<b>MatchWord:</b> " . $matchWord. "<br>";
}
}
输出(我缺少.NET): MatchWord:软件框架 MatchWord: Microsoft
答案 0 :(得分:0)
有两个问题:
“。net”在正则表达式中的意思是“一个四个字母的单词,从任何字符开始,然后是字符n,e,t”。这是因为.
是一个特殊的Match-all运算符。
问题是使用\b
的意思是“在单词边界后开始下一个匹配”,因此本质上\b
导致点被跳过。
一种可能的解决方案是将.net
数组中的net
更改为$skills
,然后通过添加\.?
来匹配任何以点开头的单词:{{ 1}}。在此版本中,"~\b\.?$skills\b~i"
仍然存在,因此\b
与net
不匹配。
请注意,点是转义符(ASP.NET
),因为它是正则表达式中的特殊“全部匹配”运算符。
答案 1 :(得分:0)
知道了
$skill = array(".net","software framework","microsoft");
$text = ".NET Framework is a software framework developed by Microsoft";
foreach ($skill as $skills) {
preg_match_all("~(?<!\S)$skills(?!\S)~i", $text, $matchWords);
foreach ($matchWords[0] as $matchWord) {
echo "<b>MatchWord:</b> " . $matchWord. "<br>";
}
}
.net输出: MatchWord: .NET MatchWord:软件框架 MatchWord: Microsoft
点击user3783243的链接以获取更多信息。