是否可以使用IF找到的单词添加“过滤器”,正则表达式不会拆分单词? - 哇,我希望我的英语有道理:))
让我说明..
这是我目前用于分割字符串的正则表达式,例如:TheStringIsSItTING Together
$taglist=preg_replace('/([a-z])([A-Z])/','$1 $2', $taglist);
使用示例字符串,正则表达式产生:String Is SIt TING
我想要一个过滤器,我可以放入SItTING,这样正则表达式就不会分割出那个词。
如果我的解释不够好,请告诉我,我正在与我的英语作斗争:)
哦,感谢一个伟大的社区!!
答案 0 :(得分:2)
你的意思是这样吗
([a-z])(?<!Slt)(?!TING)([A-Z])
此部分(?<!Slt)(?!TING)
是负面后瞻和负面前瞻的组合。他们检查小写字母和大写字母之间的这个位置,左边没有“Slt”,右边没有“TING”。
但要小心它也不匹配
TheStringIsSItFOO ==&gt;字符串是SItFOO
TheStringIsFooTING ==&gt;字符串是FooTING
一旦其中一个外观失败,字母就不会被分割。
答案 1 :(得分:2)
如果没有像@stema那样用lookaround assertions手动分开这个单词,你无法真正检查自己是否处于单词中间。要获得排除列表,您必须以编程方式执行此操作。
$taglist = 'TheStringIsNowCurrentlySItTING';
$excludeList = array(
'SItTING',
'StringIs',
);
$exclusions = implode('|', $excludeList);
$tagArr = preg_split("/($exclusions)/", $taglist, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($tagArr as &$token) {
if (!in_array($token, $excludeList)) {
$token = preg_replace('/([a-z])([A-Z])/', '$1 $2', $token);
}
}
$taglist = implode(' ', $tagArr);