我正在尝试编写一个匹配 Oracle q-quotes 的正则表达式对于 code-prettify.js 中的 PL/SQL 词法分析器。例如,
q'[Here's Johnny]'
这应该与相同的匹配
'Here''s Johnny'
(也就是说,SQL 会将其全部视为一个文本字符串。与传统的两个单引号相比,q 引号的优点是您不必遍历文本字符串,将所有的内容加倍)单引号。)
引号分隔符可以是 [、{、< 或 ( 中的任何一个,但我认为如果我可以让它使用一种括号类型,那么我可以将这些变体重复为 OR,例如
/^(?:pattern1|pattern2|pattern3))/
最终我想要一个正则表达式来匹配普通的单引号字符串或带有任何括号类型的 q 引号。
最佳答案
对于您的词法分析器,您需要 q'[Here's Johnny]'
的文本和'Here''s Johnny'
进行匹配。假设您希望匹配包含组成字符串标记的所有字符,包括引号、括号等,则此正则表达式应该有效:
(?:q'\[.*?\](?=')'|q'<.*?>(?=')'|q'\(.*?\)(?=')'|q'{.*?}(?=')'|(?!q)'(?:[^']|'')*')
两个相关部分是:
-
q'\[.*?\](?=')'
是 q 引用字符串的基础,其余相应的括号都有自己的声明,并且 -
'(?:[^']|'')*'
, 匹配单引号字符串。
您可以查看匹配示例here .
关于javascript - 正则表达式匹配 q'[Mike's bike]' 等引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32255652/