2013-10-24 4 views
0

Так что я просто возился по интернету и нашел это regex w/c довольно интересно. Я очень новичок в этом, и сегодня я хочу сделать этот шаблон поиска. Однако я довольно смущен в операторе $. И у меня заканчиваются сроки, какие ключевые слова следует искать в Google.

Regex:

(?<=<RGBA?:(-?\d{1,3},?){3,4}>).*(?=</RGBA?>$) 

данных:

<RGBA:255,255,255,2>HEY</RGBA> 
<RGB:-1,-25,-3>Is this a typo?</RGB> 
<RGB:255,255,255>YOH</RGB> 
<RGB:0,1,2>Please let me go here :(</RGB> 
<RGBA:0,255,12,255>o my, what to do here?!!!!</RGBA> 
hahahah 
hehehe2123 
<RGB:-0,-0,-0>GET ME</RGB> 

Это будет только последнюю строку GET ME, но если я удалю $ результат, как и ожидалось, но терпит неудачу, если string смежный (нет новой строки). Например:

Данные:

<RGBA:255,255,255,2>HEY</RGBA> <RGB:-1,-25,-3>Is this a typo?</RGB> 

Возвращает:

HEY</RGBA> <RGB:-1,-25,-3>Is this a typo? 

Пожалуйста, объясните, так что я могу решить эту проблему.

PS. Формат данных (строки) для другого приложения, которое я сделал

+0

«$' (и '.') интерпретируются по-разному различными программами/языками. Что вы используете? СЭД? Perl? –

+0

@j_random_hacker Я не знаю, но я делаю это онлайн [здесь] (http://www.softlion.com/webTools/RegExpTest/default.aspx) – mr5

ответ

2

Я думаю, что вы могли бы искать что-то вроде этого:

(?<=<RGBA?:(-?\d{1,3},?){3,4}>).*?(?=</RGBA?>) 

В? после. * делает выражение ленивым, а не жадным, поэтому оно не будет совпадать с закрывающим тегом.

+0

Да, это работает! Вы только что поняли. Спасибо! – mr5

0

Обычно оператор $ соответствует концу ввода. Так, например,

[0-9]+$ 

соответствует одной или нескольким цифрам, но они должны отображаться в конце строки.

Редактировать: После выполнения вашей ссылки в комментариях оператор $ соответствует концу строки ввода, что объясняет, почему, когда вы ее сохраняете, вы получаете только последнее совпадение.

+0

Но как бы я сказал, если «конец тега» строки Я ищу, и его нужно вытащить из строки и нажать на стек возвращаемых значений, но определенно не в конце строки, которую я ищу. – mr5

+0

Для этого я не знаю. Я думал, вы не уверены в значении '' 'оператора. Извините, если я вас неправильно понял. – bstamour

+0

Нет, все в порядке. Его просто непонятно в моем посте, в чем мой смысл. В любом случае, спасибо за ответ :) – mr5

1

$ указывает, что конец ввода должен соответствовать шаблону. например, регулярное выражение

foo$ 

будет соответствовать

myfoo 

но не

foobar 



^ указывает, что начало ввода должны соответствовать шаблону.Так что, если вы имели регулярное выражение

^foo 

это будет соответствовать

foobar 

но не

myfoo 



, если в сочетании обоих, например

^foo$ 

это будет соответствовать только рисунок

foo 

все остальные данные не удались.

+0

Это не работает? – mr5

+0

Обратите внимание, что обычно многострочный текстовый ввод сопоставляется по строкам, а затем '^' и '$' означает начало и конец строки. – hyde

+0

который «это»? Примеры выше работают над ссылкой на тестер, который вы опубликовали. – joelmdev

0

В большинстве языков $ соответствует концу всей строки ввода по умолчанию. Но на многих языках значение может быть изменено с помощью опции, называемой «multi-line». Затем ^ и $ соответствуют началу и концу каждой линии соответственно.

+0

Да, я разрешаю и отключаю их, но все равно не повезло :( – mr5