php regex(filter?),不应该使用正则表达式

时间:2011-11-11 14:07:49

标签: php regex

是否可以使用IF找到的单词添加“过滤器”,正则表达式不会拆分单词? - 哇,我希望我的英语有道理:))

让我说明..

这是我目前用于分割字符串的正则表达式,例如:TheStringIsSItTING Together

$taglist=preg_replace('/([a-z])([A-Z])/','$1 $2', $taglist);

使用示例字符串,正则表达式产生:String Is SIt TING

我想要一个过滤器,我可以放入SItTING,这样正则表达式就不会分割出那个词。

如果我的解释不够好,请告诉我,我正在与我的英语作斗争:)

哦,感谢一个伟大的社区!!

2 个答案:

答案 0 :(得分:2)

你的意思是这样吗

([a-z])(?<!Slt)(?!TING)([A-Z])

here on Regexr

此部分(?<!Slt)(?!TING)是负面后瞻和负面前瞻的组合。他们检查小写字母和大写字母之间的这个位置,左边没有“Slt”,右边没有“TING”。

但要小心它也不匹配

  

TheStringIsSItFOO ==&gt;字符串是SItFOO
  TheStringIsFooTING ==&gt;字符串是FooTING

一旦其中一个外观失败,字母就不会被分割。

请参阅here on Regexr

答案 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);
  1. 根据您排除的条款将其分开。
  2. 仅在未排除的条款中放置空格。
  3. 将所有东西与空间粘在一起。