Я использую регулярное выражение для сопоставления значений css.
Строка ввода для соответствия
font-size:25px;font-family:georgian;content:"' unicode given in pseudo © '";
Регулярное выражение, которое я использую для сопоставления
/.*\bcontent:(\s*[^;]*)/
Я использую $ 1, чтобы получить фактический строковый вывод регулярного выражения
Ожидаемый результат: "" Юникод задан псевдо & # 169 '"**
Но актуально "" Юникод задан псевдо & # 169
Поскольку регулярное выражение находит ;
в значении содержимого, оно там прерывается.
Итак, как я могу исправить эту ошибку.
В идеале регулярное выражение должно искать последний ;
, который не находится внутри двойных / одинарных кавычек. Потому что моя входная строка всегда будет иметь ;
после окончания каждого значения свойства.
Спасибо
Попробуйте \bcontent:\s*(".*?");
, смотрите эта демонстрация.
Упростите: возьмите фрагмент текста в кавычках:
/.*\bcontent:(\"[^\"]*\")/
Если кто-то хочет упростить шаблон, можно опустить .*
в шаблоне. Как и в моем комментарии, достаточно использовать /\bcontent:("[^"]*")/
(я просто поместил группу захвата внутри кавычек, чтобы исключить их из совпадения).
его недостаток для содержания этого дела: "'@@@@@@@@@@@@@'", "'@@@@@@@@@@@@@ &&&&&&&&&&&&&&&&&&&&&& @@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@ '","' @@@@@@@@@@@@@&&&&&&& &&&&&&&&&&&&&&&& @ @@ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ '»;
@ WiktorStribiżew Это работает, но не для всех случаев. В идеале регулярное выражение должно искать последний; который не находится внутри двойных / одинарных кавычек. Поскольку моя входная строка всегда будет иметь; после окончания каждого значения свойства.
@Pavan, конечно, не работает, в вашей строке нет «содержимого».
@PavanTiwari Невозможно получить неопределенное количество подстрок в кавычках до первой точки с запятой без кавычек в регулярном выражении. Для этого вам нужно закодировать конкретный парсер.
@PoulBak Я не уверен, о какой строке вы говорите, потому что все образцы строк содержат контент:
Eaxmple, который вы указали в комментарии, не содержит строки «контент».
Попробуйте
/.*\bcontent:\s*(.*);/
сопоставить с последним символом;
в строке. Или просто/\bcontent:\s*"([^"]*)";/
(демонстрация)