Я в строгой среде Java.Java regex match против src = "abc" или src = 'abc'
Таким образом, вопрос не так прост, как в тите, я не пытаюсь решить проблему, которую я имею, это более теоретически для лучшего знания.
Меня интересует совпадение с src с двойной или простой цитатой, но если это двойная кавычка, она также должна быть закрыта двойной кавычкой, и это также относится к простой цитате.
Я знаю, что я могу повторить регулярное выражение само по себе, а именно:
String str = "src=\"hello/\" ... src='hello/' ..."
println str.replaceAll ("src=((\"[^\"]+\")|('[^']+'))", "src=$1")
То, что я хотел бы сделать это как:
println s.replaceAll ("src=([\"'][^\"']+[\"'])", "src=$1")
Однако, если она начинается с кавычками , тогда в содержании должны быть разрешены простые кавычки, и он должен заканчиваться двойной цитатой, а не простой цитатой.
Вопрос 2:
Можно ли иметь это replaceAll с тем же типом цитаты, который был найден? Можно ли сказать, для этого матча, заменить на это2, для этого заменить на это2. Как вы можете выполнить это без создания новой строки каждый раз?
Edit для Алана Более того, пример вопроса два:
болееprintln "one ... two".replaceAll("(one)", "1").replaceAll("(two)", "2");
вдоль этих линий (не верно)
println "one ... two".replaceMyMatches("(one)[^\\w]+(two)", "\$1{1}, \$2{2}") // prints string : one{1}, two{2}
То, что я хочу, это строка: 1, 2
Ответ на первый вопрос, полученный и измененный от черной панды и Джеффа Уолкера:
String str = "src=\"1.png\" ... src='2.jpeg' ... src=\"3.p'ng\" ... src='4.jpe\"g' ... src='' ... src=\"\" ..." ;
String regex = "src=(['\"])(.+?)\\1"; // closes with the quote that is in group 1
println str.replaceAll(regex, '''src=$1../new_path/$2$1''')
выплевывает:
src="../new_path/1.png" ... src='../new_path/2.jpeg' ... src="../new_path/3.p'ng" ... src='../new_path/4.jpe"g' ... src='' ... src="" ...
Если кто-то хочет, чтобы заменить пустые, а также, просто переключите + в регулярном выражении против звезды (я не хочу этого)
Обратите внимание на оригинальные цитаты.
Ответьте на вопрос два см черный панда
Я не понимаю второй вопрос. Есть примеры? –
@AlanMoore См. Отредактированный вопрос – momomo