You are not logged in.

  • Login

1

Friday, February 25th 2011, 10:35am

Regex Hilfe für video bbcode

Hallo Zusammen,
ich scheiter an einem Regex und würde mich sehr über Hilfe freuen, da ein Freund hier was braucht und ich am Regex verzweifele.

Ich möchte eine html-Tag section, die ich zerlegen muss, da ich die Einzelteile in einem Shortcode verwende.
Ausgangspunkt kann wie folgt sein:

Source code

1
<video src="http://20101121-131236.mov" controls="controls" width="480" height="360" img-url="http://imagelink">Your browser does not support the video tag</video>


Ziel ist bspw. so was:

Source code

1
[video filmurl='http://20101121-131236.mov' posterurl='http://imagelink']

oder

Source code

1
[video filmurl='http://20101121-131236.mov']


Der Tag kann mit src und img-url sein, es kann aber auch jeder einzeln sein. Mich interessieren immer src und/oder img-url.
Aktuell habe ich folgende Lösung, die aber nur greift, wenn beide Attribute im Tag sind.

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$data['post_content'] = stripslashes( $data['post_content'] );
$data['post_content'] = preg_replace(
	"~<video\s+                          # <video plus Leerraum
	src=([\"|\'])([^\\1]*)\\1            # Attribut src
	\s+.*\s+                             # Zeug dazwischen
	img-url=([\"|\'])([^\\3]*)\\3.*>     # Attribut img-url
	.*</video>                           # Rest
	~msiUx"
	// Modifier:
	// m = Multiline
	// s = '.' erfaßt auch Umbrüche
	// i = Groß- Kleinschreibung egal, also auch <ViDeO
	// U = ungreedy, fang nur das Nötigste
	// x = Ignoriere Leeraum im Muster, für die erklärenden Kommentare
,
"[video filmurl='\\2' posterurl='\\4']",
$data['post_content']
);
$data['post_content'] = addslashes( $data['post_content'] );


Vielen Dank schon jetzt für die Mühe.

score365

Unregistered

2

Tuesday, March 1st 2011, 9:29pm

Probiere Klammern um:

Source code

1
(src=([\"|\'])([^\\1]*)\\1)*


und:

Source code

1
(img-url=([\"|\'])([^\\3]*))*

Schepp

Unregistered

3

Tuesday, March 1st 2011, 11:29pm

In einer einzigen Regex ist das nicht zu machen. Mit folgenden 4 Zeilen Code würde es klappen:

PHP Quellcode

1
2
3
4
$ausgangswert = '<video src="http://20101121-131236.mov" controls="controls" width="480" height="360" img-url="http://imagelink">Your browser does not support the video tag</video>';
$filmurl = preg_replace('/^.*src="?([^\s"]+)"?.*$/ims','$1',$ausgangswert);
$posterurl = preg_replace('/^.*img-url="?([^\s"]+)"?.*$/ims','$1',$ausgangswert);
$endwert = '[video'.($filmurl != '' && $filmurl != $ausgangswert ? " filmurl='".$filmurl."'" : '').($posterurl != '' && $posterurl != $ausgangswert ? " posterurl='".$posterurl."'" : '').']';

Schepp

Unregistered

4

Wednesday, March 2nd 2011, 2:00pm

Folgende Regex kommt dann auch mit einfachen Anführungszeichen um die Attribute herum aus:

PHP Quellcode

1
2
3
4
$ausgangswert = '<video src=\'http://20101121-131236.mov\' controls="controls" width="480" height="360" img-url=\'http://imagelink\'>Your browser does not support the video tag</video>';
$filmurl = preg_replace('/^.*src=["\']?([^\s"\']+)["\']?.*$/ims','$1',$ausgangswert);
$posterurl = preg_replace('/^.*img-url=["\']?([^\s"\']+)["\']?.*$/ims','$1',$ausgangswert);
$umgewandelt = '[video'.($filmurl != '' && $filmurl != $ausgangswert ? " filmurl='".$filmurl."'" : '').($posterurl != '' && $posterurl != $ausgangswert ? " posterurl='".$posterurl."'" : '').']';

5

Wednesday, March 2nd 2011, 3:11pm

@Schepp: Vielen lieben Dank, scheint wunderbar zu klappen - aktuell keine Schwachstelle im Regex zu finden.

Danke an alle, die sich versucht haben.

Schepp

Unregistered

6

Wednesday, March 2nd 2011, 6:52pm

Bestens! Und viel Erfolg :)

Similar threads

Social bookmarks