Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Regex probleemid märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
brixxx
Lõuapoolik
Lõuapoolik
brixxx

liitunud: 04.01.2012




sõnum 10.08.2015 19:09:41 Regex probleemid vasta tsitaadiga

Täna lõpuks sain ühe regexi tööle, väga optimeeritud küll regex ei ole, aga vähemalt leiab atribuudi väärtuse.

Regex: <test value="([0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9])"\/&gt

Täpsemalt koostasin Jmeteris ühe SOAP/XML-RPC Request ning nüüd üritan response datast leida kindlat elemendi attribuuti (ühesuguseid elemente on mitmeid, aga atribuudi väärtus erineb) - vajalik on, et see oleks esimene leitud elemendi atribuudi väärtus. Täpsustuseks Response data tuleb väga suur, et osa andmeid jääb response datas puudu.

Näidis - response data oleks:
<tests>
&lt;test value="54481574952185"/&gt;
&lt;test value="14875942186549"/&gt;
&lt;test value="25714936485170"/&gt;
</tests>

Probleem tekib, siin selles, et kõigepealt üritasin regexi tööle saada lehel regex101.com, sain tööle ja leiab õiged atribuudi väärtuse ning tundub, et leiab ka esimese sama nimetusega elemendi atribuudi väärtuse, mis mul vaja ongi.

Kuid kui kasutan sama regexit Jmeter funktsioonis Regular Expression Extractor, sel juhul leiab hoopis muu väärtuse ning kui avada response data ning otsida sealt dokumendist leitud atribuudi väärtust, siis ei leia.

Ei saagi aru, milles probleem on - ise arvan, kas otsib kaugemalt response datast atribuuti mida response data ei kuva või regex tekitab random väärtuse, aga samas väärtuse formaat tundub alati korrektne (nt. 20150607154836).

Lisan siia Jmeter funktsiooni Regular Expression Extractori ekraanipildi, mis valikud on täidetud:



Äkki keegi oskab kommenteerida, milles probleem on?


viimati muutis brixxx 11.08.2015 16:39:17, muudetud 2 korda
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 11.08.2015 12:10:35 vasta tsitaadiga

Nii, JMeteri spetsiifikast - Match no. on sul 0 ja kõrval kirjas, et 0 tähendab random ehk juhuslik. Seega vaadatakse sul kogu response data läbi ja tagastatakse juhuslik match. Kui sa tahad esimest matchi saada, siis pane sinna lahtrisse 1.

Kaks sammu tagasi võttes - kas see regex peab nii jube olema? Kas ma saan aru, et sa tahad matchida väärtusi, kus on vähemalt 14 numbri pikkude väärtus? Või peab ta täpselt 14 numbrit olema? Igal juhul, kas JMeteris see ei töötaks?
&lt;test value="([0-9]{14,})"\/&gt

Juhul, kui peab täpselt 14 olema, mitte 14 või rohkem, siis võta koma ära.

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
brixxx
Lõuapoolik
Lõuapoolik
brixxx

liitunud: 04.01.2012




sõnum 11.08.2015 16:35:03 vasta tsitaadiga

Fukiku kirjutas:
Nii, JMeteri spetsiifikast - Match no. on sul 0 ja kõrval kirjas, et 0 tähendab random ehk juhuslik. Seega vaadatakse sul kogu response data läbi ja tagastatakse juhuslik match. Kui sa tahad esimest matchi saada, siis pane sinna lahtrisse 1.

Kaks sammu tagasi võttes - kas see regex peab nii jube olema? Kas ma saan aru, et sa tahad matchida väärtusi, kus on vähemalt 14 numbri pikkude väärtus? Või peab ta täpselt 14 numbrit olema? Igal juhul, kas JMeteris see ei töötaks?
&lt;test value="([0-9]{14,})"\/&gt

Juhul, kui peab täpselt 14 olema, mitte 14 või rohkem, siis võta koma ära.

Tänud nüüd sain tööle, nüüd on võibolla veidi kergem edasi minna automaattesti koostamisega. Minu regex on seetõttu suht jube kuna alles õppin regexit kasutama ning väga hästi veel ei oska seda.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Pean siiski uuesti täie poole pöörduma - olen üritanud terve päev erinevate variantidega 2 probleemi lahendada.

Koostan taas näidis xml-i:

<list>
&lt;books&gt;
&lt;book year="2010" state="norway"/&gt;
&lt;book year="1985" state="sweden"/&gt;
&lt;book year="2004" state="germany"/&gt;
&lt;/books&gt;
</list>

1. Probleem on selles, et ei suuda kuidagi töötavat regexsit kirjutada, et otsiks sellise asukoha järgi - <books>/<book year="2010" state="norway"/>:

Toon mõned regexid nt - mida proovisin:
* &lt;books&gt;\/&lt;book year="[0-9]{4}";
* (&lt;books&gt;)\/(&lt;book year="[0-9]{4}")
* (&lt;books&gt;\/&lt;book year="[0-9]{4}")
* (&lt;books&gt;)+(&lt;book year="[0-9]{4}")
* (&lt;books&gt;+&lt;book year="[0-9]{4}")

Aga midagi ei leita, olen netist mitmeid juhendeid ja regexi testreid katsetanud ja lugenud ning ei leia mitte sobivat süntaksit.

2. Probleem on selles kui leida, kas eraldi ühe elemendi teine attribuudi väärtus või ühe regexiga leida kõik kahe attribuudi väärtused. Kuidas seda on võimalik teha, olen netis samuti terve päev uurinud ja katsetanud erinevaid variante ning tundub, et leiab ainult esimese atribuudi väärtuse.

Esimese atribuudi väärtuse leiab regexiga:
* &lt;book year="([0-9]{4})"

Teise atribuudi väärtuse puhul üritan leida - erinevat pidi, toon nt:
* &lt;book year="([0-9]{4})" state="([a-z])"\/&gt;
* &lt;book year="([0-9]{4})" state="([a-z])";
* &lt;book state="([a-z])"\/&gt;
* &lt;book year="([0-9]{4})" state=""\/&gt;
* &lt;book year="([0-9]{4})" state.
tagasi üles
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 11.08.2015 17:43:15 vasta tsitaadiga

Tundub asjakohane.. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454

Miks sa mingit XML teeki ei kasuta XML-i parsimiseks või sisendandmed ongi sul selline sodi?

_________________
ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
brixxx
Lõuapoolik
Lõuapoolik
brixxx

liitunud: 04.01.2012




sõnum 11.08.2015 20:06:45 vasta tsitaadiga

troglodyte kirjutas:
Tundub asjakohane.. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454

Miks sa mingit XML teeki ei kasuta XML-i parsimiseks või sisendandmed ongi sul selline sodi?


Tänud vastuse eest, selle asja sain toimima, et leian nüüd elemendi mõlema atribuudi väärtuse - nt. regex: &lt;book year="([0-9]{4})" state="([a-z]{0,})" - ning ükshaaval saan ka leida:
* &lt;book year="([0-9]{4})"| state="([a-z]{0,})" - year='2010';
* &lt;book year="([0-9]{4})" |state="([a-z]{0,})" - state='norway'

Kuid seda probleemi ei suuda ikka lahendada, et regex otsib enne elemendi üles ning siis alamelemendist hakkab atribuudi väärtusi otsima. Kuna vaja teha test, leida esimene element nt. test, aga kuna response data xml on suur ning on mitmeid test elemente, aga õige test element on just nt. elemendi tests all. Seega tahaksingi alamelemendi asukoha ära identifitseerida.

Vastuseks, miks minu näidis xml on selline sodi, siis vastuseks sellele, et SOAP/XML-RPC Request annab response data xml-ks sellise sodi xml-i.

Korrektse xml-ga sain asukoha identifitseerimise tööle - (?<books>)<book year="([0-9]{4})" state="([a-z]{0,})" , aga kas keegi oskaks soovitada, kuidas seda regexit kasutada näidis xml-s.

Leidsin vist lahenduse, kuidas xml teha korrektseks, kasutades beanshell string Replace nagu nt. var res = str.replaceAll("\\\\u003c", "<"); - link.

Homme hakkan tööl uurima neid leitud asju, kas need toimivad.
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 11.08.2015 23:30:00 vasta tsitaadiga

Miks sa XML'i ei töötle XML'i vahenditega ja miks vaja regexiga pornot teha?
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
brixxx
Lõuapoolik
Lõuapoolik
brixxx

liitunud: 04.01.2012




sõnum 12.08.2015 03:07:26 vasta tsitaadiga

mikk36 kirjutas:
Miks sa XML'i ei töötle XML'i vahenditega ja miks vaja regexiga pornot teha?

Vaja on teha automaattest, kus 1-st Soap Requesti response datast saab muutujad ning siis käivitab leitud muutujatega uue Soap Requesti. Hetkel väga kindel ei ole, kas Regular Expression Extractor funktsioonist saadud muutujaid saan Soap Requestis kasutada muutujatena, aga kui selgub, et ei saa, siis ilmselt peab kasutama beanshelli, õnneks regex on enam vähem õige, siis tuleb ainult beanshell skript välja mõelda.
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 12.08.2015 10:59:17 vasta tsitaadiga

mikk36 mõtles, et miks Sa sellest &lt; ja &gt; jamast korralikku XML-i ei tee ja seda näiteks XPath Extractor'iga ei töötle?

Pealegi, kas mingit mugavamat viisi automaattestimiseks pole, kui JMeter? JMeter on mõeldud koormustestimiseks, st palju ja korraga koormust andma. Kui sa tahad funktsionaalsust testida a'la ühiktestid, siis selleks on ehk mugavamaid vahendeid olemas kui JMeter. Olles elus ühe suure JMeter projekti teinud, siis ei, rohkem ei taha, suhteliselt kole asi on see.

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
brixxx
Lõuapoolik
Lõuapoolik
brixxx

liitunud: 04.01.2012




sõnum 13.08.2015 02:50:51 vasta tsitaadiga

Fukiku kirjutas:
mikk36 mõtles, et miks Sa sellest &lt; ja &gt; jamast korralikku XML-i ei tee ja seda näiteks XPath Extractor'iga ei töötle?

Pealegi, kas mingit mugavamat viisi automaattestimiseks pole, kui JMeter? JMeter on mõeldud koormustestimiseks, st palju ja korraga koormust andma. Kui sa tahad funktsionaalsust testida a'la ühiktestid, siis selleks on ehk mugavamaid vahendeid olemas kui JMeter. Olles elus ühe suure JMeter projekti teinud, siis ei, rohkem ei taha, suhteliselt kole asi on see.

Kirjeldatud automaattesti 2-e soap requestiga kasutangi koormustestiks.

Mul ongi plaanis replaceda valed &lt; ja &gt; - < ja >. Mulle soovitati just regexit ning teiseks ei oska eriti xpath-i ka, õnneks regex hakkab ühe enam selgemaks saama.

Leidsin ka asukoha leidmise korrektse regeks ilma response data parsimiseta - (&lt;books&gt;)?(&lt;book year="([0-9]{4})" state="([a-z]{0,})") ja (&lt;films&gt;)?\W&lt;book year="([0-9]{4})".
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 13.08.2015 09:58:11 vasta tsitaadiga

Käsitsi regulaaravaldistest oma kodukootud XML parseri ehitamine ei ole vast väga mõistlik. XPath ei ole ka absoluutselt mingi raketiteadus.

Võtame näiteks selle sama raamatute nimekirja, mis sul siin enne oli.
xml:
  1. <books>
  2. <book year="2010" state="norway"/>
  3. <book year="1985" state="sweden"/>
  4. <book year="2004" state="germany"/>
  5. </books>


Tahad teada kolmanda raamatu riiki? XPath avaldis on selline:
/books/book[3]/@state

Võrreldes regulaaravaldisega väga lihtne ja loogiline - nagu failisüsteemis navigeerimine.

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
brixxx
Lõuapoolik
Lõuapoolik
brixxx

liitunud: 04.01.2012




sõnum 13.08.2015 13:57:35 vasta tsitaadiga

Fukiku kirjutas:
Käsitsi regulaaravaldistest oma kodukootud XML parseri ehitamine ei ole vast väga mõistlik. XPath ei ole ka absoluutselt mingi raketiteadus.

Võtame näiteks selle sama raamatute nimekirja, mis sul siin enne oli.
xml:
  1. <books>
  2. <book year="2010" state="norway"/>
  3. <book year="1985" state="sweden"/>
  4. <book year="2004" state="germany"/>
  5. </books>


Tahad teada kolmanda raamatu riiki? XPath avaldis on selline:
/books/book[3]/@state

Võrreldes regulaaravaldisega väga lihtne ja loogiline - nagu failisüsteemis navigeerimine.

Selle lihtsa xml-ga isegi oskaks xPathi koostada, aga kui olen üritanud suurest response datast xpathi saada, siis ei leia midagi olen isegi kasutanud notepad++ xpathi õppimiseks. Aga üritan täna edasi uurida xpathi lahendust.

Sain Jmeteris juba regexit kasutades projekti valmis ning regex on saanud suht selgeks.
tagasi üles
vaata kasutaja infot saada privaatsõnum
LKits
HV Guru
LKits

liitunud: 06.09.2007




sõnum 20.10.2015 15:45:17 vasta tsitaadiga

Ei hakka uut foorumiteemat tegema, vaid kasutan seda.

Kuidas oleks regex muster, kui sooviksin matchida järgnevaid:
1.23.45.6
2.4.53
12.34

Ehk siis "punkt", millele järgneb number ning neid võib olla üpris mitu.

EDIT: lihtsalt niisama " /\d+\.\d+/ " saaks kasutada, aga see ei näita neid, millel on punkte rohkem, kui kaks.

_________________
itLahendused - Arvutite remont ja hooldus, veebilehtede loomine, soodne veebimajutus. Võta ühendust! Tel: +372 555 268 97 ja e-post info@itlahendused.ee
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
riaak
HV Guru
riaak

liitunud: 22.09.2002



Autoriseeritud ID-kaardiga

sõnum 20.10.2015 15:49:12 vasta tsitaadiga

(\.?\d+)+
_________________
¯\_(ツ)_/¯
Kommentaarid: 119 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 105
tagasi üles
vaata kasutaja infot saada privaatsõnum
LKits
HV Guru
LKits

liitunud: 06.09.2007




sõnum 20.10.2015 15:50:16 vasta tsitaadiga

Tänud icon_smile.gif ise oleksin sellise välja pakkunud " \d+(\.\d+)+ " aga sinu poolt pakutud grupp on ilusam icon_smile.gif
_________________
itLahendused - Arvutite remont ja hooldus, veebilehtede loomine, soodne veebimajutus. Võta ühendust! Tel: +372 555 268 97 ja e-post info@itlahendused.ee
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 20.10.2015 22:35:57 vasta tsitaadiga

riaaki lahendus matchib ju ka punktiga algavaid, näiteks ".1". Kas see on soovitav?
_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
LKits
HV Guru
LKits

liitunud: 06.09.2007




sõnum 21.10.2015 00:35:26 vasta tsitaadiga

Ehm... ütleme nii, et otseselt mitte, kuid hetkel täidab vajaduse icon_smile.gif
Kui tekib anomaaliaid, siis kasutan enda varianti.

_________________
itLahendused - Arvutite remont ja hooldus, veebilehtede loomine, soodne veebimajutus. Võta ühendust! Tel: +372 555 268 97 ja e-post info@itlahendused.ee
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 13
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Regex probleemid
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.