我正在尝试匹配缺少结束单引号的文本中的句子(我使用的是 PHP)。对此的简单解决方案是:~'[^']*$~但这并不能处理撇号。例如,在这些句子中'This is incomplete'This isn't incomplete.' I said 'this is incomplete. I said 'this isn't incomplete but I was wrong.我想匹配除第二个之外的所有其他人,第二个没有遗漏其结束语。我曾尝试使用否定前瞻来排除正确的闭合引号(例如,后面跟有空格、句点(或其他句尾标点符号)或行尾的位置,但我无法正确理解。(要忽略的撇号情况是撇号后面跟有 s、l、r、d 或 v 的任何情况——让我们忽略复数所有格后面可以跟一个空格的事实,因为这会让事情变得太困难。)
2 回答
精慕HU
TA贡献1845条经验 获得超8个赞
人们怎么知道I said 'this isn't incomplete but I was wrong.
引用部分应该在incomplete
. 用普通手段不是不可能。
假设你处理单行字符串,我相当简单的想法是
\B'(.*?)'\B|\B'(.*[^'\s])
并替换为'$1$2'
. 在 regex101 上查看此演示。
这个想法是
\B'(.*?)'\B
使用从前面没有单词字符(\B
非单词边界)的单引号开始的任何“完整”引号,直到后面没有单词字符的单引号并将内容捕获到$1
.\B'(.*[^'\s])
查找'
前面没有单词字符的其余部分并捕获任何内容,直到最后一个不是空格\s
或单引号 to 的字符$2
。最后更换已经完成
$1
和uncomplete$2
用'$1$2'
。有点这种想法。
远非完美,但希望有所帮助。
- 2 回答
- 0 关注
- 230 浏览
添加回答
举报
0/150
提交
取消