[英]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' headlights
或the Jones' cat
为结尾的单词上的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.