Wortendekennzeichen bei regulärem Ausdruck selber festlegen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wortendekennzeichen bei regulärem Ausdruck selber festlegen

    Hallo Gemeinde,

    wie kann ich bei einem regulären Ausdruck festlegen, dass der Punkt "." KEIN Wortendekennzeichen ist?

  • #2
    wenn der punkt ein zeichen sein soll escapen
    "\."

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Naja ... nur wo?

      Hier ist der Ausdruck:

      PHP-Code:
      $text preg_replace('#(\b'.implode('\b|\b',array_keys($x)).'\b)(?!([^<]*>))#ies',
                                  
      '\'»<a href="glossar.php?pktid=\'.\$x[strtolower(\'\1\')].\'" class=inner>\1</a>«\'',
                                  
      $text); 
      Folgendes soll gemacht werden: $x ist ein Array, dessen Keys in einem laufenden Text gesucht werden sollen. Die Treffer werden in html-Links verwandelt. Das klappt sehr gut.

      Das Problem ist nur, dass im Text schon html-Links drinnen sind und das replace auch auf die Wörter anschlägt, die innerhalb des Links als Linktitel drin stehen.

      Beispiel:

      <a href="www.hierhin.de">www.hierhin.de</a>

      Hier wird zwar das "hierhin" innerhalb des öffnenden Tags igrnoriert, aber der zweite Treffer dann durch einen Link seinerseits ersetzt.

      Also quasi so:

      <a href="www.hierhin.de">www.<a href="www.hierhin.de">www.hierhin.de</a>.de</a>

      Mein Lösungsansatz: der reguläre Ausdruck wird so verbogen, dass der Punkt "." kein Wortende mehr ist - also der Treffer würde nicht "hierhin" sein, sondern im Ernstfall "www.hierhin.de" -- da nach "hierhin" gesucht wird, würde er also "www.hierhin.de" nicht als Treffer erkennen und mir den Link nicht zerstückeln.

      Ich hoffe, ich bin irgendwie zu verstehen

      Kommentar


      • #4
        Re: Wortendekennzeichen bei regulärem Ausdruck selber festlegen

        Original geschrieben von wolkenkrieger
        wie kann ich bei einem regulären Ausdruck festlegen, dass der Punkt "." KEIN Wortendekennzeichen ist?
        wenn du \b verwendest - gar nicht.

        hilft es ggf. weiter, stattdessen nach einem/mehreren white space als "wortgrenze" zu suchen?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Leider nicht, weil die Suchstrings aus mehreren Wörtern bestehen können.

          Kommentar


          • #6
            So! Wir haben es jetzt so gelöst:

            PHP-Code:
            $text preg_replace("#([ ,\-\r\n])(".implode('|',array_keys($x)).")([ \.,\-\r\n])(?!([^<]*>))#ies",
            '\'\1»<a href="glossar.php?pktid=\'.\$x[strtolower(\'\2\')].\'" 
            class=inner>\2</a>«\3\''
            ,$text); 

            Kommentar

            Lädt...
            X