2009-08-01 3 views
4

Моя первая попытка использования RE заставила меня застрять. Я использую Regex на Wordpress сайте через Search-Regex Plugin и должны соответствовать на конкретный "погребен в кучу HTML кода HTML пример:.Помощь с регулярным выражением - Wordpress (search-regex)

provide brand-strengthening efforts for the 10-school conference.&#0160; </p> 
<p> 
    <a href="http://www.learfield.com/oldblog/.a/6a00d8345233fa69e201157155a6fc970c-pi"> 
    <img alt="MOvalleyConf500" 
     border="0" 
     class="at-xid-6a00d8345233fa69e201157155a6fc970c" 
     src="http://www.learfield.com/oldblog/.a/6a00d8345233fa69e201157155a6fc970c-800wi" 
     style="border: 1px solid black; margin: 0px; width: 502px; height: 384px;"    
     title="MOvalleyConf500" /> 
    </a> 
</p> 
<p>The photo above 

В приведенном выше примере, есть три цели

6a00d8345233fa69e201157155a6fc970c-pi" 
6a00d8345233fa69e201157155a6fc970c" 
6a00d8345233fa69e201157155a6fc970c-800wi" 

Regex Я использую is /6a00d834.*?"/, он находит их, однако я хочу только совпадение на конце ", а не всю строку. Это изображения, которые не имеют расширения своего файла, поэтому мне нужно заменить окончание " с .jpg «Я понимаю заменяющую часть выражения, это исходное совпадение. У меня есть trou с.

У меня есть куча из них (221), все целей начинаются с 6a00d834 тогда некоторыми случайными буквенно-цифровым заканчивая "

Цените любое представление. Благодарю.

Редактировать добавили от комментария OP: На самом деле это на сайте Wordpress, используя плагин (REGEX) для запроса и замены данных в SQL. Я могу использовать любое совместимое с Perl регулярное выражение. (Примечание от редактора - в зависимости от плагина, это, скорее всего, на самом деле не использует Perl, но реализация PHP PCRE.)

+2

Что именно вы хотите от этих данных ? – Gumbo

+0

Что именно вы хотите совместить и извлечь? – You

+0

И какой язык вы хотите? – Gumbo

ответ

4

Сменная замена может быть выполнена вместе с соответствующими. Так как вы используете PHP, используйте preg_replace

$newstring = preg_replace("/(6a00d834.*?)(\")/", "\\1.jpg\\2", $oldstring) 

Это разбивает матч на две группы, а затем вставляет «.jpg» между ними.

Для wordpress regex plugin используйте /(6a00d834.*?)(")/ для строки матча, а затем использовать \ 1.jpg \ 2 для строки замены.

+0

Так получилось. Спасибо, Майкл. Извините, начальный вопрос был так неясен. В следующий раз постараюсь быть более конкретным. Сообщество: Большое спасибо за помощь. Вы, ребята, замечательные! – 2009-08-01 15:43:35

+0

Майкл смог разобраться в этом и обеспечить решение. Спасибо всем, но особенно Майклу за то, что он торчал ! – 2009-08-01 15:46:03

0

Возможно, используется оператор группы?

/6a00d834.*?(")/ 

Затем, в зависимости от вашего регулярного выражения API, вы можете вытащить только то, что согласуется в круглых скобках.

Редактировать

Ах, вы хотите сделать замену строки. Я думаю, вы используете Perl. Попробуйте следующее:

s/(6a00d834.*?)(")/\1.jpg\2/ 
+0

Это своего рода избыточно, потому что вы всегда получаете двойной qoute из этой группы. – You

+0

Да, но я подумал, что это то, что он хотел: «но я хочу только совпадение на конце», а не целую строку цели ». –

+0

Все уважение, но ОП не может быть лучшим судьей того, чего он хочет, если вы знаете, что я имею в виду. – Telemachus

2

Не так ли?

/(6a00d834.*?)"/ 

Edit: Вы сказали, что в одном из своих комментариев вы хотите заменить " с .jpg"; в таком случае это регулярное выражение, вероятно, работать:

/6a00d834.*?(")/ 

Тем не менее, лучше всего сделать, это, вероятно, использовать первый регулярному_выражению я предоставил, и использовать строку замены, которая выглядит следующим образом:

'\\1.jpg"' 

Конечно, \\1 должен быть заменен на все, что вы используете для использования в regexp для обратных ссылок.

+0

@Michael: Я, вероятно, вложил его неправильно. Правильно ли сейчас? – You

+0

спасибо, ребята,/(6a00d834. *?) "/ соответствует мне как /6a00d834.*?"/ для меня. В трех примерах, которые я опубликовал, я только должен был нажать на конец« Это ссылки на изображения, которые не имеют их расширения, поэтому я хочу чтобы заменить «с .jpg» надеждой, которая помогает очистить ее. – 2009-08-01 14:00:49

+0

@Phil: замена '' 'чувствует себя в обратном направлении, попробуйте добавить' .jpg' совпадение первого результата первого регулярного выражения, которое я опубликовал. – You

1

Вы вопрос не совсем ясен, но, возможно, вы имели в виду:

 
/6a00d834[^"]*"/ 

(То есть: матч 6a00d834 следуют ноль или более символов, которые не «а затем»)

Альтернативно , если он доступен в используемом вами двигателе регулярных выражений, вы можете использовать нежелательный спецификатор для ограничения метасимвола '*'. Имейте в виду, что любой вопрос о регулярном выражении зависит от используемого вами движка. Например:

 
$ cat input 
6a00384foo" more" 
$ perl -ne '/(6a00384[^"]*")/; print "$1\n"' input 
6a00384foo" 
$ perl -ne '/(6a00384.*?")/; print "$1\n"' input 
6a00384foo" 
$ sed 's/\(6a00384[^"]*"\).*/\1/' input 
6a00384foo" 
$ sed 's/\(6a00384.*?"\).*/\1/' input 
6a00384foo" more" 

Обратите внимание, что символ '?' не является неживым спецификатором в sed.

+0

Нежелательное регулярное выражение, которое использует Фил, уже выполняет это. Это ' ? часть регулярного выражения. –

+0

Использование?для обозначения не-жадных является perl конкретных. Использование [^ "] является более общим. –

+0

[^"] труднее читать и поддерживать, хотя –

0

Я предполагаю, что вы хотите извлечь все после 6a00d834 до первого последующего ". Так что попробуйте следующее:

/6a00d834([^"]*)"/ 

Совпадение первой группы будет, а не той строкой, которую вы ищете.

+0

Я только хочу извлечь «в конце строки, которая начинается с 6a00d834 » – 2009-08-01 13:52:56

+0

Зачем вам это нужно? – Gumbo

+0

для замены «с .jpg» - это ссылки на изображения, которые смешивают расширение файла. – 2009-08-01 13:55:43