2009-08-10 4 views
0

У меня есть необработанный HTML, и мне нужно установить все IMG src = "http: // foo".RegEx для установки IMG src = ""

Это RegEx, который у меня есть до сих пор, и, похоже, он работает. В моей среде можно с уверенностью предположить, что теги имеют верхний регистр, а атрибуты - строчные. Я делаю это в .Net, но я не думаю, что платформа действительно имеет значение здесь. \ s - это пробелы в модуле .Net RegEx.

Можно ли улучшить его?

Regex.Replace(htmlText, "(<IMG[^>]*\\ssrc=\")([^\"]*)(\"[^>]*>)", "$1http://foo$3") 

ответ

1

а не regexpert любыми средствами, но попробуйте txt2re.com

может быть, это поможет вам начать работу: http://txt2re.com/index-ruby.php3?s=%3CIMG%20src=%22http://foo.bar/baz.jpg%22%20/%3E&1

+0

Это отличный совет для изучения и использования регулярных выражений. Спасибо за публикацию. – reporter

+0

Спасибо! Приятно видеть, что 2-летний комментарий по-прежнему полезен. – user94154

+0

Хороший учебник для изучения новых вещей никогда не истечет ;-) – reporter

0

Может позволить для нескольких пространств с \s+

2

Матч весь IMG и затем сопоставить атрибут src="([^\"]*)", заменив его, предоставив вам замену только для части src = "...".

Затем вы можете использовать исходное совпадение и искать весь тег и заменять его всем тегом.

+0

Таким образом, поиск тега изображения будет «<[Ii] [Mm] [Gg] [^>] *>», и вы можете поймать тег src как строчным или нечувствительным аналогичным образом. – maxwellb

0

Другой подход заключается в использовании парсера HTML. ИМО, вам гораздо лучше использовать парсер, чем регулярное выражение для этой задачи.

+0

+1. Хотя я обычно соглашаюсь с этим полностью, иногда, парсер HTML не работает. В случае с моим вопросом (старым), использование механизма синтаксического анализа HTML проходило слишком долго, потому что у меня было много HTML для работы за короткий промежуток времени. Подход регулярного выражения был значительно быстрее, но менее надежным. Однако это не указано в ОП. –

+0

Голос хакерского хакера в моей голове говорит, что в этом случае использовать параллелизм/MapReduce. Или просто рыжий с грифом, как нормальный, здравомыслящий человек! – user94154

Смежные вопросы