<p><strong>编辑</strong></p>
<p>我修改了正则表达式,它与更复杂的情况匹配:</p>
<pre><code>(?=(?<!\w|[!?.])('|\")(?!\s)(?P<content>(?:.(?!(?<=(?=\1).)(?!\w)))*)\1(?!\w))
</code></pre>
<p><a href="https://regex101.com/r/Q0t3Rp/1" rel="nofollow">DEMO</a></p>
<p>现在更复杂了,主要的改进是不直接匹配一些标点符号(<code>[!?.]</code>)和更好的引号大小写分隔。通过各种实例进行验证。在</p>
<p>句子将在<code>content</code>捕获组中。当然,它有一些限制,与空格的使用有关,等等,但是它应该适用于大多数格式正确的句子,或者至少可以用于示例。在</p>
<ul>
<li><code>(?=(?<!\w|[!?.])('|\")(?!\s)</code>-匹配<code>'</code>或{<cd5>}前面没有单词或标点符号(<code>(?<!\w|[!?.])</code>)或不带空格(<code>(?!\s)</code>)的<code>'</code>或{<cd5>}部分在组1中捕获以供进一步使用</li>
<li><code>(?P<content>(?:.(?!(?<=(?=\1).)(?!\w)))*)\1(?!\w))</code>-匹配句子,后跟
与开始时相同的字符(<code>'</code>或{<cd5>}在组1中捕获),忽略其他引号</li>
</ul>
<p>它不直接匹配整个句子,但是由于捕捉组嵌套在lookaround结构中,所以使用全局匹配修饰符,它也将匹配句子中的句子-因为它只直接匹配句子开始之前的位置。在</p>
<p><strong>关于您的regex:</strong></p>
<p>我想,<code>[^\1]*</code>你指的是任何字符,但不是组1中捕获的字符,但character类不是这样工作的,因为它将<code>\1</code>作为八进制表示法中的字符(我认为这是某种空白)而不是对捕获组的引用。看看<a href="https://regex101.com/r/eN7jU3/1" rel="nofollow">this example</a>-阅读说明。还要比较<a href="https://regex101.com/r/qF5pI5/1" rel="nofollow">THIS</a>和<a href="https://regex101.com/r/jA2dZ7/1" rel="nofollow">THIS</a>正则表达式的匹配。在</p>
<p>为了达到您想要的效果,您应该使用lookaround,类似这样的方法:<a href="https://regex101.com/r/cH4fG8/1" rel="nofollow">^{<cd15>}</a>-捕获开始字符,然后匹配每个不紧跟捕获的开始字符的字符,然后再捕获一个字符,它直接位于捕获的字符之前-并且您在排除的字符之间有完整的内容。在</p>