Я в строгой среде Java.
Так что вопрос на самом деле не такой простой, как в статье, я не пытаюсь решить возникшую у меня проблему, он более теоретический для лучшего знания.
Что меня интересует, так этосопоставление с src двойной или простой кавычкой, но если это двойная кавычка, ее также необходимо закрыть двойной кавычкой, и то же относится и к простой кавычке.
Я знаю, что могу повторитьсамо по себе регулярное выражение, то есть:
String str = "src=\"hello/\" ... src='hello/' ..."
println str.replaceAll ("src=((\"[^\"]+\")|('[^']+'))", "src=$1")
Я хотел бы сделать следующее:
println s.replaceAll ("src=([\"'][^\"']+[\"'])", "src=$1")
Однако, если он начинается с двойной кавычки, то в кавычках должны быть разрешенысодержание, и оно должно заканчиваться двойной кавычкой, а не простой цитатой.
Вопрос 2:
Можно ли заменить его на все найденные цитаты того же типа?Можно ли сказать, что для этого совпадения заменить на this2, для этого заменить на that2.Как вы можете сделать это, не генерируя новую строку каждый раз?
Правка для Алана Мора, пример для второго вопроса:
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="" ...
Если кто-то тоже хочет заменить пустые, просто переключите + в регулярном выражении против звезды (я этого не хочу)
Обратите вниманиеоригинальные цитаты также есть.
Ответьте на вопрос два см. черная панда