VVL99
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору класс в квадратных кавычках [^"] это один символ, его можно размножить [^"]+ (1 и более) или [^"]* (0 и более), но если он захвачен он будет. Чтобы не захватить нужно просмотр вперёд (?!...) (?=...) или просмотр назад (?<!...) (?<=...) Можно обхитрить, воткнуть его в группу замены типа ([^"]x) заменить на \1 то есть он не потеряется вставившись с группой. Пояснение (?x)(?<!["\d])(\d++)(?!") | (?<!["\d])(?:(\d++)") | (?:"(\d++))(?!") Здесь 3 регулярки, флаг (?x) позволяет пробелы, чтобы отделять части элементов, в обработке они не участвуют (?<!["\d]) (\d++) (?!") здесь просмотр вперёд и назад, то есть ищем число (\d++) в скобках чтобы возвратить, ++ означает искать вперёд не проверяя, то есть число захватиться всё, иначе он может захватить часть числа и в средине вставить кавычку, если не позволяешь ему вставить её в конце. Просмотр назад (?<!["\d]) то есть перед числом не должно быть кавычка и число. Просмотр вперёд (?!") после числа не должна быть кавычка. Это первая регулярка ставит кавычки если число совсем без кавычек. А что если одна кавычка слева или одна справа? Добавил две регулярки для этих случаев (?<!["\d])(?:(\d++)"), то есть одинаковость что в обоих есть группа (\d++) и группы с просмотром назад (?<!["\d]) и вперёд (?!"), то есть запрещают с одной стороны иметь кавычку. Но на другой стороне кавычка допускается (?:(\d++)") здесь (?:...") означает группа без захвата (?:...), но с кавычкой, то есть регулярка ищет с кавычкой, но при замене вставляет без кавычки, а кавычки вставляются в строке замены обе. Мы таким способом удалили лишнюю кавычку. | Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 00:55 10-04-2019 | Исправлено: VVL99, 01:00 10-04-2019 |
|