Regex 简单正则表达式:我可以';我好像没赶上月经

Regex 简单正则表达式:我可以';我好像没赶上月经,regex,preg-replace,Regex,Preg Replace,代码: $raw = "Test List: Dist. dist Disti distributor"; $repld = preg_replace('/\b(dist(\.|i?)(ributor)?)\b/i', 'ruff', $raw); echo $repld; 期望: 测试列表:环状环状环状环状环状环状 获取: 测试列表:ruff。褶边 在第一个“皱褶”之后,有一段时间我似乎无法理解。 诚然,我不是regex-wiz,但我认为\。会是一个匹配:) 我哪里出错了?\b与之间的部分不

代码:

$raw = "Test List: Dist. dist Disti distributor";
$repld = preg_replace('/\b(dist(\.|i?)(ributor)?)\b/i', 'ruff', $raw);
echo $repld;
期望:
测试列表:环状环状环状环状环状环状

获取:
测试列表:ruff。褶边

在第一个“皱褶”之后,有一段时间我似乎无法理解。
诚然,我不是regex-wiz,但我认为
\。
会是一个匹配:)


我哪里出错了?

\b
之间的部分不匹配。因为这不是一个词的界限

\.
移过
\b

$repld = preg_replace('/\b(disti?(ributor)?)\b\.?/i', 'ruff', $raw);

当然,现在它与
分发服务器匹配。
这可能是您不想要的。但是,即使您的原始代码与
distiributor
匹配,您可能也不需要。

匹配
分发服务器。
在这种情况下不会导致任何问题。谢谢。你能进一步澄清为什么它不匹配吗?我正在努力理解解释。通过忽略本例中未使用的所有大小写,简化字符串
“Dist.”
的regexp,它是
/\bdist\。\b/I
。所以
\b
之后和``之前匹配-记住
\b
是零宽度模式,所以它不匹配特定的字符或字符串,它只是在两个字符之间的某一点匹配。但是
\b
始终匹配单词边界,这意味着它前面必须有一个字母,后面必须有一个字母;
和``都不是字母。还有更清楚的吗?水晶!!非常感谢。