2015-08-27 1 views
2

Я пытаюсь написать регулярное выражение, которое будет соответствовать Oracle q-quotes для лексера PL/SQL в code-prettify.js. Например,Regex подходит для котировок, таких как q '[Mike's bike]'

q'[Here's Johnny]' 

Это должно сопровождаться таким же, как

'Here''s Johnny' 

(то есть, так что SQL будет относиться ко всем как один текстовой строки. Преимущество д кавычками над обычным два -single-quotes - вам не нужно проходить через вашу текстовую строку, удваивая все ваши одинарные кавычки.)

Ограничитель цитат может быть любым из [, {, <, или (, но я думаю, что если я может заставить его работать с одним типом кронштейна, тогда я могу повторить варианты как OR, например,

/^(?:pattern1|pattern2|pattern3))/ 

В конечном счете я хочу один регулярное выражение, которое будет соответствовать обычной одинарных кавычках или ватную цитату с любым из типов скобок.

+0

Это должно соответствовать '' Вот Джонни''? Это двойной или одиночный?? – Onilol

+0

@Onilol - тоже, но я имел в виду две одинарные кавычки. Это стандартный способ цитирования цитаты в SQL. –

ответ

3

Для вашего лексера вы хотели бы получить текст q'[Here's Johnny]' и 'Here''s Johnny'. Предполагая, что вы хотите матч, чтобы включить все символы, содержащие маркер строки, включая кавычки, скобки и т.д., это регулярное выражение должно работать:

(?:q'\[.*?\](?=')'|q'<.*?>(?=')'|q'\(.*?\)(?=')'|q'{.*?}(?=')'|(?!q)'(?:[^']|'')*')

двух соответствующих частей являются:

  1. q'\[.*?\](?=')' является основой для строк с q-кавычками, а остальные соответствующие скобки имеют свои собственные утверждения, а
  2. '(?:[^']|'')*', соответствует строкам с одной кавычкой.

Вы можете найти соответствующие примеры here.

+1

Отлично, спасибо. Рабочий пример на http: //www.williamrobertson. net/documents/test_plsql_highlighting.html (удаленный и повторно добавленный этот комментарий пару раз, так как я думал, что у меня все еще была проблема с prettify.js, но исправила его сейчас.) –