Markus1: Regulärer Ausdruck macht mir Probleme

Hallo,

ich wollte den Text zwischen den ersten beiden /.
Dies hat mit

   $rc = preg_match ('/^\/(.*)\/.*$/U', $hf1, $treffer);  

geklappt.
Das Gleiche aber mit den Begrenzern :

  
   $rc = preg_match ('/^\\(.*)\\.*$/U', $hf1, $treffer);  

funktioniert nicht.
Woran liegt dies?

  1. Hi,

    Das Gleiche aber mit den Begrenzern :

    $rc = preg_match ('/^\(.)\.$/U', $hf1, $treffer);

    
    > funktioniert nicht.  
    > Woran liegt dies?  
      
    Weil du kein \\ in deinem regulären Ausdruck drin stehen hast, sondern nur \  
      
    MfG ChrisB  
      
    
    -- 
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    
    1. Hi,

      Das Gleiche aber mit den Begrenzern :

      $rc = preg_match ('/^\(.)\.$/U', $hf1, $treffer);

      
      > > funktioniert nicht.  
      > > Woran liegt dies?  
      >   
      > Weil du kein \\ in deinem regulären Ausdruck drin stehen hast, sondern nur \  
      >   
      
      Verstehe ich nicht. Es sind doch \\ wie vorher beim \/
      
      1. Tach!

        Weil du kein \ in deinem regulären Ausdruck drin stehen hast, sondern nur \ Verstehe ich nicht. Es sind doch \ wie vorher beim /

        Im PHP-String, ja. Aber das kommt nicht im Muster an, weil PHP das schon vorher für seinen String verbraten hat. Siehe http://php.net/manual/en/regexp.reference.escape.php

        dedlfix.

        1. Hi,

          Siehe http://php.net/manual/en/regexp.reference.escape.php

          Blackout? Nachfolgendes funktioniert auch nicht.

          <?php  
            
          $hf1='c:\tst0\tst1\tst2\test.txt';      // Gesucht tst0  
            
          print ($hf1 . '<br>');  
            
          $rc = preg_match ('/^\\\\(.*)\\\\.*$/U', $hf1, $treffer);  
          $Name = $treffer[1];  
            
          echo "Name: $Name*";        // => Name: *  
          ?>
          
          1. Tach!

            Blackout? Nachfolgendes funktioniert auch nicht.
            $hf1='c:\tst0\tst1\tst2\test.txt';      // Gesucht tst0
            $rc = preg_match ('/^\\(.*)\\.*$/U', $hf1, $treffer);

            Der zu durchsuchende String passt auch nicht auf das Muster. Er fängt nicht mit einen \ an.

            dedlfix.

            1. gudn tach!

              Blackout? Nachfolgendes funktioniert auch nicht.
              $hf1='c:\tst0\tst1\tst2\test.txt';      // Gesucht tst0
              $rc = preg_match ('/^\\(.*)\\.*$/U', $hf1, $treffer);

              Der zu durchsuchende String passt auch nicht auf das Muster. Er fängt nicht mit einen \ an.

              damit wenigstens das archiv eine loesung dafuer bietet:

              statt
                '/^\\(.*)\\.*$/U'
              besser:
                '/[1]*+\\([^\\]*+)\\/'

              also [string-begin][mind. 0 nicht-backslashes][backslash][mind. 0 nicht-backslashes, merken][backslash][reststring interessiert nicht].

              (und vermutlich macht
                '/\\([^\\]*+)\\/'
              dasselbe, aber ich weiss nicht, ob die regexp-specs das hergeben.)

              prost
              seth


              1. ^\\ ↩︎