繁体   English   中英

正则表达式只允许在以's结尾的单词中使用撇号

[英]Regex to allow apostrophe only in words ending with 's

我正在阅读一些文件,我需要删除字符串中的所有撇号,除了以's结尾的单词中的撇号。

例子:

弗兰克的蓝色车 - >弗兰克的蓝色车

弗兰克'蓝'车 - >弗兰克蓝车

'弗兰克的蓝色车 - >弗兰克的蓝色车

弗兰克的'蓝色'车 - >弗兰克的蓝色车

'弗兰克蓝车' - >弗兰克蓝车

Frank'blue'car - > Frankbluecar

在此先感谢您的帮助!

编辑:修改问题,因为我只需要以's结尾的单词来保持撇号,而不仅仅是单数占有的。

所以基本上你想要禁止两边都没有字母包围的撇号。 您可以尝试以下方法:

/(?<![a-z])'|'(?!s\b)/i

用空字符串替换与之匹配的任何内容。 如果你想允许一些收缩,你可以稍微扩大它:

/(?<![a-z])'|'(?![a-z]\b)/i

这种模式符合您的要求,但我提供了一些注意事项:

  • 它将阻止'tis'twas ,这是有效的英语。
  • 第一种模式将阻止大多数收缩,例如didn't收缩。
  • 没有英语词典数据库,就不可能区分单数占有(例如Frank's )和以S结尾的收缩(例如she's )。
  • 最后,请记住,这也将阻止大多数复数。 这句话是正确的英文,但它仍然会被阻止:

    孩子们的玩具

试试这个: /(?<!s)'(?!s)\\b/i

结果:

Frank's blue car   ->  NO Match
Frank 'blue' car   ->  Match two single quotes
'Frank's blue car  ->  Match first single quote only
Frank's' blue 'car ->  Match all single quotes except the one in Franck
'Frank blue car'   ->  Match all single quotes
Frank'blue'car     ->  Match all single quotes
cars'              ->  NO Match

该命令会删除所有周围的单引号,除了
- 占有欲:母亲的妹妹......
- 短辅助动词:不是不是......

preg_replace("/(?<![a-z])'|'(?![st]\b)/i", '', $str)

使用(')([^sS][^ ]|$)怎么样? 它应匹配您要删除的所有撇号情况。 然后,您应该使用第二个捕获组的内容替换整个匹配的内容。

编辑 :正如评论中所讨论的那样,这并没有发现尾随s落在以s, cars' headlightsthe Jones' cat为结尾的单词上的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM