我正在嘗試匹配缺少結束單引號的文本中的句子(我使用的是 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 關注
- 259 瀏覽
添加回答
舉報
0/150
提交
取消