Regex 插入缺少撇号的高效正则表达式?

Regex 插入缺少撇号的高效正则表达式?,regex,Regex,我试图构建一个正则表达式和替换字符串,可以用来插入缺少的撇号。示例: 不要->不要 我会的 我可以让它与捕获组一起工作,但我尝试只需要打电话。更换一次。现在我有一些类似于: $apostropheregex = '\b((didn|won|ain|don)(t)|(i)(ll|m))\b' $apostrophereplacement='$2$4''$3$5' 但是,将前缀组和后缀组混为一谈,假设我们只匹配其中一个(或“ll”或“t”匹配),感觉很难看 有人有什么建议吗?有没有更好的方法来解决

我试图构建一个正则表达式和替换字符串,可以用来插入缺少的撇号。示例:

不要->不要

我会的

我可以让它与捕获组一起工作,但我尝试只需要打电话。更换一次。现在我有一些类似于:

$apostropheregex = '\b((didn|won|ain|don)(t)|(i)(ll|m))\b'
$apostrophereplacement='$2$4''$3$5'
但是,将前缀组和后缀组混为一谈,假设我们只匹配其中一个(或“ll”或“t”匹配),感觉很难看

有人有什么建议吗?有没有更好的方法来解决这个问题?我真的应该将它们视为两个单独的场景,并使用单独的正则表达式和替换字符串运行replace两次吗


更新:澄清一下,我知道这可能会产生意想不到的后果,因为不考虑英语语法上下文,所以替换不应该被替换的字符串。我在首先查看字符串之后手动运行此操作,我仍然认为这是一个有趣的问题。

请注意:这不适合。。。不合身,这就变成了我会合身

但是你要求一个更好的正则表达式,你会得到的。我将使用:

\b(?|(don)(t)|(won)(t)|(you)(re))\b
替换将为
$1'$2

这个正则表达式的主要优点是可读性。您应该能够轻松地添加新的更改


它通过使用分支重置组
(?)
工作。这意味着每次交替使用
$1
$2
(而不是2n+1和2n+2)。

什么正则表达式味道?@Laurel似乎是php“愚蠢的,不会理解英语不是简单的可解析的,一定是病了。所以我拍摄了它。现在我需要一个新的DOT,它不仅做简单的解析。”谢谢。我意识到这会带来一些过度矫正的可能性,但我使用它的背景是,风险非常低。你建议的正则表达式当然更具可读性。谢谢另外,感谢您告诉我有关分支重置组的信息。很酷。