这里的问题是捕获单引号内的内容(如'xyz')。 但撇号与单引号(')的符号相同即将出现!
我写的正则表达式是:/(\w\'\w)(*SKIP)(*F)|(\'[^\']*\')/
我使用的例子是:Hello ma'am 'This is Prashanth's book.'
需要捕获的是:'This is Prashanth's book.'
。
但是,被捕的是:'This is Prashanth'
!
这是我在online regex tester上尝试的链接
任何帮助是极大的赞赏。谢谢!
您不能使用[^\']
捕获包含'
的文本,在您的示例中,This is Prashanth's book.
在文本中包含'
字符。你需要修改你的正则表达式使用.*?
而不是[^\']
并且可以写你的正则表达式,
(\w'\w)(*SKIP)(*F)|('.*?'\B)
此外,您不需要转义单引号'
,因为它在正则表达式中没有特殊含义。
从您的示例中,不清楚您是否希望捕获的匹配包含匹配的'
。如果你不想在匹配中捕获'
,你可以使用基于lookarounds的正则表达式并使用它,
(?<=\B').*?(?='\B)
正则表达式的解释:
(?<=\B')
- 这背后的积极外观确保在比赛中捕获的内容之前是单引号,其前面没有由\B
确保的单词字符.*?
- 以非贪婪的方式捕获文本(?='\B)
- 确保匹配的文本后跟单引号,\B
确保它与任何单词字符后面紧跟的引号不匹配。例如。它不会像's
那样匹配结束语对于您提供的字符串,您可以使用正则表达式:
\B'\K(?:(?!'\B).)+
说明:
\B
- 一个非单词边界'
- 匹配'
\K
- 忘记到目前为止匹配的所有内容(?:(?!'\B).)+
- 匹配任何字符的1 +次出现(换行除外),它不以'
开头,后跟非字边界