• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

REGEX Bastelkiste

style-guide!

Lounge-Member
Hat vielleicht jemand eine idee, wie man aus
PHP:
[ URL = ht tp: // ww w. test . de ]Stiftung Warentest[/ URL ]
mit Hilfe einer preg_replace einen normalen Link generieren kann? Leerzeichen einfach wegdenken, sonst setzt das VB das gleich wieder als Link um.
Innerhalb des VB Codes hab ich mir das zwar auch angesehen, steige da aber irgendwie nicht mehr durch zu dieser Stunde :(

PHP:
if($dobbcode and strpos($bbcode,"]")) {
    if (!isset($regexcreated)) {
      $regexcreated = 1;
      $phpversionnum = phpversion();

      if (floor($phpversionnum) < 4) {
        $searcharray = array(
          "/(\[)(list)(=)(['\"]?)([^\"']*)(\\4])(.*)(\[\/list)(((=)(\\4)([^\"']*)(\\4]))|(\]))/siU",
          "/(\[)(list)(])(.*)(\[\/list\])/siU",
          "/(\[\*\])/siU",
          "/(\[)(url)(=)(['\"]?)(www\.)([^\"']*)(\\4)(.*)(\[\/url\])/siU",
          "/(\[)(url)(=)(['\"]?)([^\"']*)(\\4])(.*)(\[\/url\])/siU",
          "/(\[)(url)(])(www\.)([^\"]*)(\[\/url\])/siU",
          "/(\[)(url)(])([^\"]*)(\[\/url\])/siU",
          "/(\[)(php)(])(\r\n)*(.*)(\[\/php\])/siU",
          "/(\[)(code)(])(\r\n)*(.*)(\[\/code\])/siU",
          "/javascript:/si",
          "/about:/si"
        );

        $replacearray = array(
          "<ol type=\"\\5\">\\7</ol>",
          "<ul>\\4</ul>",
          "<li>",
          "<a href=\"http://www.\\6\" target=\"_blank\">\\8</a>",
          "<a href=\"\\5\" target=\"_blank\">\\7</a>",
          "<a href=\"http://www.\\5\" target=\"_blank\">\\5</a>",
          "<a href=\"\\4\" target=\"_blank\">\\4</a>",
          "</normalfont><blockquote><pre><smallfont>code:</smallfont><hr>\\5<hr></pre><normalfont></blockquote>",
          "</normalfont><blockquote><pre><smallfont>code:</smallfont><hr>\\5<hr></pre><normalfont></blockquote>",
          "java script:",
          "about :"
        );
      } else {
        $searcharray = array(
          "/(\[)(list)(=)(['\"]?)([^\"']*)(\\4])(.*)(\[\/list)(((=)(\\4)([^\"']*)(\\4]))|(\]))/esiU",
          "/(\[)(list)(])(.*)(\[\/list\])/esiU",
          "/(\[)(url)(=)(['\"]?)([^\"']*)(\\4])(.*)(\[\/url\])/esiU",
          "/(\[)(url)(])([^\"]*)(\[\/url\])/esiU",
          "/(\[)(code)(])(\r\n)*(.*)(\[\/code\])/esiU",
          "/(\[)(php)(])(\r\n)*(.*)(\[\/php\])/esiU",
          "/javascript:/si",
          "/about:/si"
        );

        $replacearray = array(
          "createlists('\\7', '\\5')",
          "createlists('\\4')",
          "checkurl('\\5', '\\7')",
          "checkurl('\\4')",
          "stripbrsfromcode('\\5')",
          "phphighlite('\\5')",
          "java script:",
          "about :"
        );
      }  // end version check

      $doubleRegex = "/(\[)(%s)(=)(['\"]?)([^\"']*)(\\4])(.*)(\[\/%s\])/siU";
      $singleRegex = "/(\[)(%s)(])(.*)(\[\/%s\])/siU";

      $bbcodes=$DB_site->query("SELECT bbcodetag,bbcodereplacement,twoparams FROM bbcode");

      while($bbregex=$DB_site->fetch_array($bbcodes)) {
        if ($bbregex[twoparams]) {
          $regex=sprintf($doubleRegex, $bbregex[bbcodetag], $bbregex[bbcodetag]);
        } else {
          $regex=sprintf($singleRegex, $bbregex[bbcodetag], $bbregex[bbcodetag]);
        }
        $searcharray[] = $regex;
        $replacearray[] = $bbregex[bbcodereplacement];
        // and get nested ones:
        $searcharray[] = $regex;
        $replacearray[] = $bbregex[bbcodereplacement];
        $searcharray[] = $regex;
        $replacearray[] = $bbregex[bbcodereplacement];
      }

    }

    if ($phpversionnum<"4.0.5") {
      $bbcode=str_replace("'", "\'", $bbcode);
    }
    $bbcode=preg_replace($searcharray, $replacearray, $bbcode);

    if($dobbimagecode and ($bbuserinfo[userid]==0 or $bbuserinfo[showimages])) {
      // do [img]xxx[/img]
      $bbcode = preg_replace("/(\[)(img)(])(\r\n)*([^\"".iif($allowdynimg,"","\?\&")."]*)(\[\/img\])/siU", "<img src=\"\\5\" border=\"0\" alt=\"\">", $bbcode);
    }
    $bbcode = preg_replace("/(\[)(img)(])(\r\n)*([^\"]*)(\[\/img\])/siU", "<a href=\"\\5\" target=\"_blank\">\\5</a>", $bbcode);

    $bbcode=str_replace("\\'", "'", $bbcode);

    if (floor($phpversionnum) < 4) {
      // get rid of stray <br> tags in the code - upsets older browsers (IE 4.72 reported problems)
      $codebits=explode("</normalfont><pre><smallfont>code:</smallfont></normalfont><hr><blockquote>",$bbcode);
      list($key,$bbcode)=each($codebits);

      while (list($key,$val)=each($codebits)) {
        $sbbits=explode("</blockquote><hr></pre><normalfont>",$val);
        $newbits=str_replace("<br>", "", $sbbits[0])."</blockquote><hr></pre><normalfont>".$sbbits[1];
        $bbcode.="</normalfont><pre><smallfont>code:</smallfont></normalfont><hr><blockquote>".$newbits;
      }
    }
  }
alles klar :confused: :(


Habt dank... :rolleyes:
 
Hallo!

Ich bin zwar kein Experte in Sachen reguläre Ausdrücke nimm aber an das folgendes funktionieren sollte:

PHP:
$vbcode_String = "[ URL = ht tp:// ww w. test.de ]Stiftung Warentest[ /URL ]";

$searchpattern  = "/([)(url)(=)(['\"]?)([^\"']*)(\4])(.*)([/url])/siU";
$replacepattern = "<a href=\"\5\" target=\"_blank\">\7</a>";

$result = preg_replace($searchpattern, $replacepattern, $vbcode_String);

Ich garantiere aber für nichts ;)
 
Jetzt muss nur noch die angegeben adresse variabel sein, denn es ist natürlich nicht immer die Stiftung Warentest :D. Aber erstmal besten Dank, damit hab ich erstmal wieder einen Ansatz zum weiter machen :)
 
Hallo!

Versuch das ganze gerade zu lösen, aber mit obigen Beispiel von mir funktioniert es nicht.

Melde mich bei Erfolg wieder
 
Ich habe derzeit folgende Lösung auf Basis von PHP eregi_replace gefunden, wobei ich mir nicht sicher bin, ob das auch wirklich funktioniert. Und da auch andere Code Kürzel drin vorkommen können, muss vor allem die reihenfolge stimmen, was mir mächtig auf den senkel geht :( :(

PHP:
$text = eregi_replace("\[url\]|\[url=", "<a class='short' target='_blank' href='", $text);
$text = eregi_replace("\[\/url\]", "</a>", $text);
$text = eregi_replace("\]", "'>", $text);
 
Ich habe es jetzt mal folgendermassen gelöst gekriegt, ist noch nicht perfekt, aus nutzbar und funktioniert für's erste, vielleicht braucht ja jemand das auch :D :D

PHP:
function bbcodeparse($bbcode,$preview=true) {
     global $dbname,$conn;
    // $bbcode=str_replace("&","&",$bbcode);
    //$bbcode=str_replace("{", "{", $bbcode);

      $regexcreated = 1;

      $searcharray = array(
          "/(\[)(list)(=)(['\"]?)([^\"']*)(\\4])(.*)(\[\/list)(((=)(\\4)([^\"']*)(\\4]))|(\]))/esiU",
          "/(\[)(list)(])(.*)(\[\/list\])/esiU",
          "/(\[)(url)(=)(['\"]?)([^\"']*)(\\4])(.*)(\[\/url\])/esiU",
          "/(\[)(url)(])([^\"]*)(\[\/url\])/esiU",
          "/(\[)(code)(])(\r\n)*(.*)(\[\/code\])/esiU",
          "/(\[)(php)(])(\r\n)*(.*)(\[\/php\])/esiU",
          "/javascript:/si",
          "/about:/si"
        );

        $replacearray = array(
          "createlists('\\7', '\\5')",
          "createlists('\\4')",
          "checkurl('\\5', '\\7')",
          "checkurl('\\4')",
          "stripbrsfromcode('\\5')",
          "phphighlite('\\5')",
          "java script:",
          "about :"
        );

      $doubleRegex = "/(\[)(%s)(=)(['\"]?)([^\"']*)(\\4])(.*)(\[\/%s\])/siU";
      $singleRegex = "/(\[)(%s)(])(.*)(\[\/%s\])/siU";

      /*$query="SELECT bbcodetag,bbcodereplacement,twoparams FROM bbcode";
	  $result=mysql_db_query($dbname,$query,$conn) or die(mysql_error());
      while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        if ($bbregex[twoparams]) {
          $regex=sprintf($doubleRegex, $bbregex[bbcodetag], $bbregex[bbcodetag]);
        } else {
          $regex=sprintf($singleRegex, $bbregex[bbcodetag], $bbregex[bbcodetag]);
        }
        $searcharray[] = $regex;
        $replacearray[] = $bbregex[bbcodereplacement];
        // and get nested ones:
        $searcharray[] = $regex;
        $replacearray[] = $bbregex[bbcodereplacement];
        $searcharray[] = $regex;
        $replacearray[] = $bbregex[bbcodereplacement];
      }*/

   // }

    $bbcode=preg_replace($searcharray, $replacearray, $bbcode);

      // do [img]xxx[/img]
    //$bbcode = preg_replace("/(\[)(img)(])(\r\n)*([^\"".iif($allowdynimg,"","\?\&")."]*)(\[\/img\])/siU", "<img src=\"\\5\" border=\"0\" alt=\"\">", $bbcode);
	if($preview==false){
		$bbcode = preg_replace("/(\[)(img)(])(\r\n)*([^\"]*)(\[\/img\])/siU", "<img src=\"\\5\" border=\"0\" alt=\"\">", $bbcode);
	    //$bbcode = preg_replace("/(\[)(img)(])(\r\n)*([^\"]*)(\[\/img\])/siU", "<a href=\"\\5\" target=\"_blank\">\\5</a>", $bbcode);
	}else{
		$bbcode = preg_replace("/(\[)(img)(])(\r\n)*([^\"]*)(\[\/img\])/siU", "", $bbcode);
	    //$bbcode = preg_replace("/(\[)(img)(])(\r\n)*([^\"]*)(\[\/img\])/siU", "", $bbcode);
	}
    $bbcode=str_replace("\\'", "'", $bbcode);
	$bbcode = eregi_replace("\[i\]","<i>",$bbcode);
	$bbcode = eregi_replace("\[/i\]","</i>",$bbcode);
	$bbcode = eregi_replace("\[b\]","<b>",$bbcode);
	$bbcode = eregi_replace("\[/b\]","</b>",$bbcode);
	$bbcode = eregi_replace("\[u\]","<u>",$bbcode);
	$bbcode = eregi_replace("\[/u\]","</u>",$bbcode);
	

  return ($bbcode);

Das einzige was mir halt noch fehlt, ist der DB Connect um dort die vorhandenen code's auszulesen und zu nutzen, aber das kommt auch noch die Tage rein und wird dann funktionieren, ganz bestimmt. Wenn jemand laut ich will schreibt, packe ich auch die nedgültige Version rein :D
 
Zurück
Oben