我正在阅读一些文件,我需要删除字符串中的所有撇号,除了以's结尾的单词中的撇号。
示例:
弗兰克的蓝色车 - >弗兰克的蓝色车
Frank'blue'汽车 - >弗兰克蓝车
'弗兰克的蓝色车 - >弗兰克的蓝色车
弗兰克的'蓝色'车 - >弗兰克的蓝色车
'弗兰克蓝车' - >弗兰克蓝车
Frank'blue'car - > Frankbluecar
提前感谢您的帮助!
编辑:修改后的问题,因为我只需要用's结尾的单词来保留撇号,而不仅仅是单数占有的。
答案 0 :(得分:2)
所以基本上你想要禁止两边都没有字母包围的撇号。您可以尝试以下方法:
/(?<![a-z])'|'(?!s\b)/i
用空字符串替换与之匹配的任何内容。如果你想允许一些收缩,你可以稍微扩大它:
/(?<![a-z])'|'(?![a-z]\b)/i
这种模式符合您的要求,但我提供了一些注意事项:
'tis
和'twas
,这些都是有效的英语。didn't
。Frank's
)和以S结尾的收缩(例如she's
)。
儿童玩具
答案 1 :(得分:2)
试试这个:
/(?<!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
答案 2 :(得分:1)
如何使用(')([^sS][^ ]|$)
?它应匹配您要删除的所有撇号情况。然后,您应该使用第二个捕获组的内容替换整个匹配的内容。
编辑:正如评论中所讨论的那样,这不会出现在以{,cars' headlights
或the Jones' cat
结尾的单词上删除尾随s的情况。< / p>
答案 3 :(得分:1)
除了
之外,该命令会删除所有周围的单引号
- 占有欲:母亲的妹妹......
- 短辅助动词:不是不是......
preg_replace("/(?<![a-z])'|'(?![st]\b)/i", '', $str)