Что нового

[RegExp] Как получить имя и значение тега

IgRo

Знающий
Сообщения
65
Репутация
5
Имеется многострочный документ с тегами вида
Код:
<Комментарий>не менее 
5,5 кДж/м2</Комментарий>
Как получить имя
Пытаюсь так
Код:
$sName = StringRegExpReplace($sNodeXML, '.*</([^<>/]+)>.*', '$1')
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Re: [RegExp] Как получить имя тега

Что именно хотите получить на выходе.
Чему должен быть равен $sName ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: [RegExp] Как получить имя тега

IgRo
Попробуйте так.
Код:
$sText = '<Комментарий>не менее' & @CRLF & '5,5 кДж/м2</Комментарий>'

$sName = StringRegExpReplace($sText, '(?s).*<([^<>/]+?)>.*', '$1')

ConsoleWrite(@extended & @TAB & $sName & @LF)
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Re: [RegExp] Как получить имя тега

Код:
$sHtmlCode='<Комментарий>не менее 5,5 кДж/м2</Комментарий>'
$aTagName = StringRegExp($sHtmlCode,"(?s)<(\/?.+?)>", 1)
If IsArray($aTagName) Then
ConsoleWrite($aTagName[0])
Endif
 
Автор
I

IgRo

Знающий
Сообщения
65
Репутация
5
Re: [RegExp] Как получить имя тега

Код:
$sNodeXML='<Ref>1d377bda-d8c1-11de-8008-0015170f31a8</Ref>'& @CRLF
$sNodeXML &='<Owner xsi:type="CatalogRef">1d377bda-d8c1-11de-8008-0015170f31a8</Owner>'& @CRLF
$sNodeXML &= '<Комментарий>не менее' & @CRLF & '5,5 кДж/м2</Комментарий>'

$sName = StringRegExpReplace($sNodeXML, '(?s).*<([^<>/]+?)>.*', '$1')
ConsoleWrite($sName & @LF)

Выдает "1 Комментарий"
В идеале на выходе нужно получить
Код:
Ref, Owner, Комментарий


Добавлено:
Сообщение автоматически объединено:

[РЕШЕНИЕ]
Код:
#include <array.au3>

$sNodeXML='<Ref>1d377bda-d8c1-11de-8008-0015170f31a8</Ref>'& @CRLF
$sNodeXML &='<Owner xsi:type="CatalogRef">1d377bda-d8c1-11de-8008-0015170f31a8</Owner>'& @CRLF
$sNodeXML &= '<Комментарий>не менее' & @CRLF & '5,5 кДж/м2</Комментарий>'
$sName= ""
$aTagName = StringRegExp($sNodeXML,"</([^<>/]+?)>", 3)
If IsArray($aTagName) Then
$sName=_ArrayToString($aTagName, ", ")
Endif
ConsoleWrite($sName & @LF)

[НЕ РЕШЕНО]
Получить значение
Код:
$sNodeXML='<Ref>1d377bda-d8c1-11de-8008-0015170f31a8</Ref>'& @CRLF
$sNodeXML &='<Owner xsi:type="CatalogRef">1d377bda-d8c1-11de-8008-0015170f31a8</Owner>'& @CRLF
$sNodeXML &= '<Комментарий>не менее' & @CRLF & '5,5 кДж/м2</Комментарий>'
$sValue = StringRegExpReplace($sNodeXML, '.*<([^<>/]+)(?:\sxsi:)?(.*="[^">]+")?>(.*?)</\1>.*', "'$2$3'")
ConsoleWrite($sValue & @LF)

На выходе
Код:
'1d377bda-d8c1-11de-8008-0015170f31a8'
'type="CatalogRef"1d377bda-d8c1-11de-8008-0015170f31a8'
<Комментарий>не менее
5,5 кДж/м2</Комментарий>
Не обработался тег Комментарий :stars:
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Код:
$sNodeXML='<Ref>1d377bda-d8c1-11de-8008-0015170f31a8</Ref>'& @CRLF
$sNodeXML &='<Owner xsi:type="CatalogRef">1d377bda-d8c1-11de-8008-0015170f31a8</Owner>'& @CRLF
$sNodeXML &= '<Комментарий>не менее' & @CRLF & '5,5 кДж/м2</Комментарий>'
$sNodeXML = StringRegExpReplace($sNodeXML, '(?<!\>)\r\n', ' ')
$sValue = StringRegExpReplace($sNodeXML, '.*<([^<>/]+)(?:\sxsi:)?(.*="[^">]+")?>(.*?)</\1>.*', "'$2$3'")
ConsoleWrite($sValue & @LF)


К сожалению не смог вставить "(?<!\>)\r\n" в общее выражение.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Может так:
Код:
#Include<Array.au3>
$sText = "ddddddddddddddddddd"  & @CRLF & _ 
"<Ref>1d377bda-d8c1-11de-8008-0015170f31a8</Ref>"  & @CRLF & _ 
"<Owner xsi:type='CatalogRef'>1d377bda-d8c1-11de-8008-0015170f31a8</Owner>"  & @CRLF & _ 
"<Комментарий>не менее"  & @CRLF & _ 
"5,5 кДж/м2</Комментарий>"  & @CRLF & _ 
"ffffffffffffffffffffffffffffff"

$sPatern = ">([^<]+)</"
$aResult = StringRegExp( $sText, $sPatern, 3 )
_ArrayDisplay($aResult, ' Test Result ')
 
Верх