ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: RegExp gesucht
BeitragVerfasst: 20 Sep 2010, 16:31 
Offline
Geselle

Registriert: 31 Okt 2008, 00:29
Beiträge: 143
Hallo

ich suche einen Regulären Ausdruck der mit den String zwischen <%= und => als Ergebnis matched.

Insgesamt liegt ein String über mehreren Zeilen vor der alles enthalten kann was auch Ruby Code enthalten kann.

Ich find den einfach nicht.

Danke schon mal

Grüße


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: RegExp gesucht
BeitragVerfasst: 20 Sep 2010, 16:52 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
Ich hoffe, dass es auch unter Ruby 1.8 läuft, deshalb habe ich kein look behindbenutzt...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# encoding = windows-1252
the_text = <<ENDOFBLABLA
Hier steht erst mal aller m��glicher Quatsch - wenn ich "Quatsch"
schreibe, meine ich auch ��$%&/0987656(/&%798���@ghvx und das Ende
vor dem Anfang => , wie gerade geschehen. Nun aber mal zum Inhalt.

Ich m��chte <%=das hier alles haben, da kann
drin-
stehen
was will und wie es will, also auch
class Otto
def hugo
self.paul(123.4e55, /[r-s/)
end
end
und irgendwelche HTML-Sachen, wie <a href="emit.html">blub</a>
Das alles so lange, bis endlich eine schliessende Klammer kommt =>
wenn hier eine weitere steht, wird die ignoriert, bis <%=wieder
ein geklammerter Block kommt.=>
Klar?

ENDOFBLABLA

the_text.scan(/(<%=)(.*?)(?==>)/m) do
puts "********** erkannter Text **********"
puts $2
end
...gibt...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
********** erkannter Text **********
das hier alles haben, da kann
drin-
stehen
was will und wie es will, also auch
class Otto
def hugo
self.paul(123.4e55, /[r-s/)
end
end
und irgendwelche HTML-Sachen, wie <a href="emit.html">blub</a>
Das alles so lange, bis endlich eine schliessende Klammer kommt
********** erkannter Text **********
wieder
ein geklammerter Block kommt.

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: RegExp gesucht
BeitragVerfasst: 20 Sep 2010, 17:24 
Offline
Interpreter
Benutzeravatar

Registriert: 18 Sep 2008, 22:32
Beiträge: 1821
Wohnort: NRW → UN
subsonic hat geschrieben:
ich suche einen Regulären Ausdruck der mit den String zwischen <%= und => als Ergebnis matched.
Und das hat auch ganz sicher nichts mit ERB zu tun? Das benutzt nämlich exakt diese Syntax, die durch Rails auch irgendwann als RHTML bekannt wurde.

Vale,
Quintus

_________________
Habe den Mut, dich deines eigenen Verstandes zu bedienen! — Immanuel Kant

Ich bin freischaffender Softwareentwickler und freue mich über jedes neue Projekt. Kontaktinformation auf meiner Website.

Mein Blog | GitHub-Profil | Auf Twitter: @qquintilianus | PGP/GPG-Schlüssel: B1FE 958E D5E8 468E AA20 8F4B F1D8 799F BCC8 BC4F


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: RegExp gesucht
BeitragVerfasst: 21 Sep 2010, 04:00 
Offline
Geselle

Registriert: 31 Okt 2008, 00:29
Beiträge: 143
Ja Danke so gehts.

Ja im Endeffekt hat das schon was mit ERB zu tun. Aber nicht nur. Dieser Code steht nicht unbedingt in einem View.
Es ist etwas komplizierter das jetzt zu erklären. Da müsst ich zu weit ausholen.

Ich hatte mich auch verschrieben was nichts zur Sache tut.

Ich meinte eigendlich den Text zwischen <%= und %> so wie echtes ERB


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: RegExp gesucht
BeitragVerfasst: 21 Sep 2010, 16:14 
Offline
Interpreter
Benutzeravatar

Registriert: 18 Sep 2008, 22:32
Beiträge: 1821
Wohnort: NRW → UN
subsonic hat geschrieben:
Ja im Endeffekt hat das schon was mit ERB zu tun. Aber nicht nur. Dieser Code steht nicht unbedingt in einem View.
ERB ist nicht nur für Rails, das ist in der Stdlib:


1
2
3
4
5
6
7
8
9
10
11
irb(main):001:0> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]"
irb(main):002:0> require "erb"
=> true
irb(main):003:0> erb = ERB.new("<%= 'y ist: ' + y.to_s %>")
=> #<ERB:0x7f05f2b8a048 @safe_level=nil, @src="_erbout = ''; _erbout.concat(( 'y ist: ' + y.to_s ).to_s); _erbout", @filename=nil>
irb(main):004:0> y = 7
=> 7
irb(main):005:0> erb.result(binding)
=> "y ist: 7"
irb(main):006:0>
Ansonsten ist WoNáDos Regexp für deinen Schreibfehler fast passend:


/(<%=)(.*?)(?==>)/m
nach


/(<%=)(.*?)(?=%>)/m
abändern.

Vale,
Quintus

_________________
Habe den Mut, dich deines eigenen Verstandes zu bedienen! — Immanuel Kant

Ich bin freischaffender Softwareentwickler und freue mich über jedes neue Projekt. Kontaktinformation auf meiner Website.

Mein Blog | GitHub-Profil | Auf Twitter: @qquintilianus | PGP/GPG-Schlüssel: B1FE 958E D5E8 468E AA20 8F4B F1D8 799F BCC8 BC4F


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: RegExp gesucht
BeitragVerfasst: 23 Sep 2010, 20:24 
Offline
Geselle

Registriert: 31 Okt 2008, 00:29
Beiträge: 143
Hi,

also ich komm da jetzt immer noch nicht weiter.

Der regexp stimmt wenn ich mich auf http://rubular.com/ verlassen kann.
Leider macht er im ausgeführten code dennoch nich was er soll.

Ich führe das jetzt mal etwas genauer aus.
Ziel ist ein Embedded Ruby innerhalb von XML welches durch konformes xml ersetzt werden soll.

Hier einmal das XML+ERB


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<document type='freeswitch/xml'>
<section name='dialplan' description='RE Dial Plan For FreeSwitch'>
<context name='public'>
<!-- Kommentare -->

<%=
rdp = Dialplan.new
extension1 = rdp.add_extension(:name=
>"Test1", :options=>{:continue=>"true"})
condition1_1 = extension1.add_condition(:field=
>"destination_number", :expression=>"/^500/", :options=>{:break=>"on-true"})
condition1_2 = extension1.add_condition(:field=
>"caller_id_name",:expression=>"Spautz")
action1_1_1 = condition1_1.add_action(:application=
>"bridge", :data=>"sofia/gateway/gw/$1", :options=>{:inline=>"true"})
antiaction1_1_1 = condition1_1.add_antiaction(:application=
>"log", :data=>"Phonenumber 500 is not available.", :options=>{})
action1_2_1 = condition1_2.add_action(:application=
>"log", :data=>"Caller_Id Name: Mustermann", :options=>{})
extension2 = rdp.add_extension(:name=
>"Test2", :options=>{:continue=>"false"})

if call['Hunt-Channel-Hangup-Time']
>'0'
condition2_1 = extension1.add_condition(:field=
>"${cond(${my_var} > 12 ? YES : NO)}",:expression=>"^YES$")
action2_1_1 = condition2_1.add_action(:application=
>"log", :data=>"INFO ${my_var} is indeed greater than 12", :options=>{:inline=>"true"})
else
condition2_1 = extension1.add_condition(:field=
>"log",:expression=>"#{call['Hunt-Channel-Hangup-Time']}", :options=>{})
end
%
>
</context>
</section>
</document>


Dieses File liegt als String in der Datenbank vor und wird ausgelesen.

Ein


1
2

xml_string.gsub(/(<%=.*?%>)/m, RubyDialplan.dp_generator(xml_string.scan(/(<%=)(.*?)(?%>)/m)[0][1], call)) if xml_string.index("<%=")


sollte eigentlich sein übriges tun und reines xml erzeugen.

Tut es aber nicht. Es wird das File so wieder gegeben wie es vorher war. Mit ERB im XML.

Anmerkung:
RubyDialplan.dp_generator fürt den RubyCode aus wobei Dialplan xml erzeugt und zurück gibt gemäß der Diaplan Definition von Freeswitch.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: RegExp gesucht
BeitragVerfasst: 23 Sep 2010, 21:12 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4872
Wohnort: RLP
Ui, ähm. Kannst du mal bitte ein "funktionierendes" Beispiel posten und grob skizzieren, was du als Ergebnis willst? Was macht #call? Was soll das "if xml_string.index("<%=")", wo doch gsub eh nur ausgeführt wird, wenn da enthalten ist?

Gruß,
Skade


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: RegExp gesucht
BeitragVerfasst: 23 Sep 2010, 23:34 
Offline
Geselle

Registriert: 31 Okt 2008, 00:29
Beiträge: 143
Vielleicht sollte ich dazu noch sagen



1
2
3

>> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]"


Also im Grunde genommen ist das was da passiert innerhalb von RubyDialplan schon getestet und macht was es soll. Da würd ich mir an Deiner Stelle keine Gedanken machen. Auch um den Ruby Code innerhalb des XML Files würd ich mir keine Gedanken machen. Das wird einfach nur ausgeführt.

add_extension(..) erzeugt <extension ...>...</extension>
add_condition(..) erzeugt <condition ...>...</condition>
usw.

Also es wird der Ruby Code innerhalb des XMLs herausgefiltert ausgeführt und durch das Ergebnis(Rückgabewert ist ein xml String) ersetzt. So soll es jedenfalls sein.

Call ist einfach nur ein Objekt, das Parameter vom freeswitch enthällt für den Call der durchgeführt werden soll. Ist für das eigentliche Problem auch unbedeutend. Wird mit Übergeben um innerhalb des Ruby Codes der ausgeführt werden soll zugreifbar zu sein.

Das mit dem if xml_string.index("<%=") versteh ich auch nicht. Aber mein Chef hat das eingebaut, damit RubyDialplan nicht ausgeführt wird fall kein ERB im XML existiert. Das scheint wohl den weiteren Ablauf zu verhindern.

Ich injeziere den gefiltereten Ruby Code zwischen <%= und %> mit self.instance_eval(xml_string) innerhalb des Konstruktors von RubyDialplan.
Dialplan selbst ist eine weitere Klasse im Module RubyDialplan die dann die Methoden add_extension(), add_condition(), usw enthällt

Ergebnis soll sein:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<document type='freeswitch/xml'>
<section name='dialplan' description='RE Dial Plan For FreeSwitch'>
<context name='public'>
<extension ...>
<condition ...>
<action .../>
<antiaction ../>
</condition>
</extension>
<!-- weitere xml code je nach Ruby -->
</context>
</section>
</document>


Aber es funktioniert ja nicht einmal das hier



1
2
3

regex = Regexp.new(/(<%=.*%>)/m)
xml_string.gsub(regex, '')


ein p xml_string bringt einfach wieder den ganzen XML-Ruby Mix auf der Konsole aus.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: RegExp gesucht
BeitragVerfasst: 24 Sep 2010, 02:06 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
Müsstest Du nicht gsub! statt gsub nehmen?

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: RegExp gesucht
BeitragVerfasst: 24 Sep 2010, 04:08 
Offline
Geselle

Registriert: 31 Okt 2008, 00:29
Beiträge: 143
Oh misst.

Das wars.

Danke Dir. Super Forum hier.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: