Вызов Regex: нельзя использовать '^' - PullRequest
1 голос
/ 18 ноября 2009

Короче говоря, я работаю с библиотекой с ошибкой, которая вызывает сбой, если я использую регулярное выражение с кареткой после скобки (например, регулярное выражение [^ a]). Исправлена ​​ошибка, и переключение библиотек - непростая задача, и я бы хотел продолжить работу с этого момента и до устранения ошибки.

Таким образом, мне нужно выразить следующие два регулярных выражения без использования каретки:

[^'] and [^"]

Можно ли это сделать? Если так, то как? На данный момент может быть приемлемо сделать регулярное выражение, содержащее все символы ascii, но я работаю с юникодом, так что это не является водонепроницаемым обходным решением.

Ответы [ 4 ]

5 голосов
/ 18 ноября 2009

Да, попробуйте:

(?!['"]).

Я предполагаю, что ваша библиотека регулярных выражений поддерживает взгляд в будущее.

Что на самом деле делает это:

(?!      # start negative look ahead
  ['"]   #   match a single- or double quote
)        # stop negative look ahead
.        # match any character other than line breaks

Простым английским языком: «если одинарная или двойная кавычка не может быть« видимой »при взгляде вперед, сопоставьте любой символ (кроме разрывов строки)».

1 голос
/ 18 ноября 2009

Как насчет замены 'char чем-то другим (скажем, 0xdeadbeef или подобным), а затем его повторной заменой?

0 голосов
/ 18 ноября 2009

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

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

0 голосов
/ 18 ноября 2009

Вам необходимо сообщить нам, какие регулярные выражения поддерживает библиотека. В зависимости от библиотеки вы можете получить что-то вроде [\x00-!#-&(-\U0010ffff]. Кроме того, это также зависит от того, использует ли используемая вами библиотека UTF-16 и суррогатные пары при сопоставлении с регулярным выражением, или правильно ли она соответствует символам юникода вне BMP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...