2013-05-18 1 views
1

у меня есть вар, которые имеют некоторый текст:Найти текст между ключевыми фразами

<cfsavecontent variable="foo"> 
element.password_input= 
<div class="holder"> 
<label for="$${input_id}" > $${label_text}</label> 
<input name="$${input_name}" id="$${input_id}" value="$${input_value}" type="password" /> 
</div> 
# END element.password_input 
element.text_input= 
<div class="ctrlHolder"> 
<label for="$${element_id}" > $${element_label_text}</label> 
<input name="$${element_name}" id="$${element_id}" 
value="$${element_value}" type="text" 
class="textInput" /> 
</div> 
# END element.text_input 
</cfsavecontent> 

и я пытаюсь разобрать через вар, чтобы получить все разного типа (ов) здесь элемент является то, что у меня есть до сих пор:

ar = REMatch("element\.+(.*=)(.*?)*", foo) 

но это только дает мне эту часть:

element.text_input= 
element.password_input= 

любая помощь будет оценена.

ответ

5

Ваша непосредственная проблема заключается в том, что по умолчанию . не включает в себя символы новой строки - вам нужно будет использовать флаг (?s) в вашем регулярном выражении для этого.

Однако просто включение этого флага еще не приведет к тому, что ваше текущее регулярное выражение будет делать то, что вы ожидаете от него.

Лучше регулярное выражение будет:

(element\.\w+)=(?:[^##]+|##(?! END \1))+(?=## END \1) 

Вы бы тогда сделать ListFirst(match[i],'=') и ListRest(match[i],'='), чтобы получить имя и значение. (реванш не возвращает захваченных групп).

(Очевидно, что приведенные выше #s удваиваются, чтобы избежать их КФ)


выше регулярное выражение расчлененный является:

(element\.\w+)= 

element. Match и любой алфавитно-цифровой, поместили его в захватить группу 1, затем сопоставить = персонаж.

(?: 
    [^##]+ 
| 
    ##(?! END \1) 
)+ 

Матч любое количество не хэш символов или хэш не следует концовки знак (с помощью отрицательного предпросмотра (?!...)) и ссылки на захват группы 1 (\1), повторить столько раз, сколько возможно (+), используя не захватную группу ((?:...)).

(?=## END \1) 

Lookahead (?=...) подтвердить окончание маркеров в переменных присутствуют.

+0

Огромное вам спасибо! – user2397715

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