php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack (1) Themen-Optionen Thema bewerten
Alt 03.05.2005, 14:48  
Gast
 
Beiträge: n/a
Standard Regular Expression, Suchen bis zum ersten suppart...

Hallo

Ich habe einen String der etwa wie folgt aussieht:

hello = 1 OR bla < 3 AND fifu LIKE '%asdf%' AND puff = 'xy' OR bla < 3

Nun möchte ich z.Bsp. den Teil von 'bla' bis AND in einem Suppart haben. Beziehungsweise 'bla' bis (AND|OR|NOT), da ich nicht weiss wie die nächste Bedinnung verknüpft wurde.

Dazu habe ich mir folgendes zusammengebaut:
$needle = preg_replace('/.*(bla.*)(?i:AND|OR|NOT).*/', '\1', $haystack);

Das funktioniert insofern, dass ich den Teil von 'bla' bis zum letzten (AND|OR|NOT) erhalte. Ich möchte aber den Bereich von 'bla' bis zum ersten (AND|OR|NOT)....

Gruss Jonas
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.05.2005, 15:11  
Gast
 
Beiträge: n/a
Standard

hi,

habe etwas rumgespielt und das einfachste war es den ganzen ausdruckzu zerlegen.
hier mein ergebnis ;

PHP-Code:
<?

$regex 
"/([a-z]+)\s*(=|<|>|LIKE)\s*(\d+|'[^']*')\s*(AND|OR){0,1}\s*/ism";
$input "hello = 1 OR bla < 3 AND fifu LIKE '%asdf%' AND puff = 'xy' OR bla < 3 ";
preg_match_all($regex$input$outputPREG_PATTERN_ORDER);
var_dump($output);

?>
Code:
array(5) {
  [0]=>
  array(5) {
    [0]=>
    string(13) "hello = 1 OR "
    [1]=>
    string(12) "bla < 3 AND "
    [2]=>
    string(23) "fifu LIKE '%asdf%' AND "
    [3]=>
    string(15) "puff = 'xy' OR "
    [4]=>
    string(8) "bla < 3 "
  }
  [1]=>
  array(5) {
    [0]=>
    string(5) "hello"
    [1]=>
    string(3) "bla"
    [2]=>
    string(4) "fifu"
    [3]=>
    string(4) "puff"
    [4]=>
    string(3) "bla"
  }
  [2]=>
  array(5) {
    [0]=>
    string(1) "="
    [1]=>
    string(1) "<"
    [2]=>
    string(4) "LIKE"
    [3]=>
    string(1) "="
    [4]=>
    string(1) "<"
  }
  [3]=>
  array(5) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "3"
    [2]=>
    string(8) "'%asdf%'"
    [3]=>
    string(4) "'xy'"
    [4]=>
    string(1) "3"
  }
  [4]=>
  array(5) {
    [0]=>
    string(2) "OR"
    [1]=>
    string(3) "AND"
    [2]=>
    string(3) "AND"
    [3]=>
    string(2) "OR"
    [4]=>
    string(0) ""
  }
}
gruss
Sike
  Mit Zitat antworten
Alt 03.05.2005, 15:17  
Erfahrener Benutzer
 
Registriert seit: 29.10.2004
Beiträge: 1.783
derHund
Standard

preg_split würde es hier eventuell auch tun.

warum allerdings (im ersten schritt schon) am NOT gesplittet werden soll, weiß ich nicht?
__________________
derHund ist offline   Mit Zitat antworten
Alt 03.05.2005, 15:19  
Gast
 
Beiträge: n/a
Standard Ihr seid grossartig :)

Aber ich konnte es wie folgt lösen:

$needle = preg_replace('/.*(bla.*?)(?i:AND|OR|NOT).*/', '\1', $haystack);

Diesen Trick hatt mir jemand im IRC geflüstert. Ich wäre im Leben nicht darauf gekommen...

Der Unterschied liegt im :

"... (bla.*?) ...*

Also das Fragezeichen nach dem .*
  Mit Zitat antworten
Alt 03.05.2005, 16:52  
Erfahrener Benutzer
 
Registriert seit: 29.10.2004
Beiträge: 1.783
derHund
Standard

modifier U.
Zitat:
warum allerdings (im ersten schritt schon) am NOT gesplittet werden soll, weiß ich nicht?
__________________
derHund ist offline   Mit Zitat antworten
Alt 03.05.2005, 18:18  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Der Beitrag wurde verschoben, wegen...
... Postings im falschen Forum.

Bemerkung:
Die gestellte Frage entspricht nicht dem Wissensstand eines Profis. Dazu: http://www.phpfriend.de/forum/viewtopic.php?t=21431

moved to PHP - Fortgeschrittene
__________________
mod = master of disaster
Waq ist offline   Mit Zitat antworten
Alt 03.05.2005, 22:17  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

hm und was ist mit
Code:
n LIKE "AND" OR y = "OR"
da würden eure codes müll machen... allerdings habe ich gerade keine passende lösung parat
Buhmann ist offline   Mit Zitat antworten
Alt 04.05.2005, 09:03  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard

Zitat:
Zitat von Buhmann
hm und was ist mit
Code:
n LIKE "AND" OR y = "OR"
da würden eure codes müll machen... allerdings habe ich gerade keine passende lösung parat
Geht das in PHP überhaupt? In Perl habe ich den g-Modifier, den ich in PHP aber nicht kenne:
Code:
#!/usr/bin/perl -Tw

use strict;
use warnings;
use Data::Dumper;

my $text = "hello = 1 OR bla < 3 AND fifu LIKE '%asdf%' AND puff = 'xy' OR bla < 3";
my @matches = $text =~ /\s*([0-9A-Za-z_-]+\s*(?:<|>|=|!=)\s*["']?[0-9A-Za-z]*["']?)\s+(?:(?i)\<AND|OR\>)?/g;

print Dumper (\@matches);

$VAR1 = [
          'hello = 1',
          'bla < 3',
          'puff = \'xy\'',
          'bla <'
        ];
Das funktioniert übrigens nur beschränkt (wie man sieht), ist also nicht fertig! Man muss wohl an den Konjunktionen splitten.
__________________
Cheers, Marco
marsch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

LinkBacks (?)
LinkBack to this Thread: http://www.php.de/php-fortgeschrittene/22380-regular-expression-suchen-bis-zum-ersten-suppart.html
Erstellt von For Type Datum
Metacrawler - Die Metasuchmaschine. This thread Refback 24.11.2008 22:08

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu Regular Expression Schiedsrichter PHP Tipps 2008 1 19.09.2007 16:41
regular expression? Dilandau PHP Tipps 2006 55 30.06.2006 16:10
regular Expression verstehen GothicFiction PHP Tipps 2006 14 23.05.2006 23:15
Suchen und ersetzen mit Regular Expressions? Datenbanken 0 09.09.2005 15:21
Regular Expression - Alles zwischen Anführungzeichen PHP Tipps 2005-2 3 05.08.2005 14:07
Posix Regular Expression Problem PHP Tipps 2005 9 15.02.2005 15:59
mit regular expressions einen Link umformen?? Wie?? 18inch PHP-Fortgeschrittene 8 19.01.2005 23:45
[Erledigt] Datum mit Regular Expression kontrollieren PHP Tipps 2004-2 7 06.12.2004 09:44
[Erledigt] regular expression: bin zu blöd PHP-Fortgeschrittene 2 08.11.2004 13:12
Regular Expressions PHP Tipps 2004 2 31.07.2004 13:12

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
javascript regex fragezeichen, regex fragezeichen, javascript regexp fragezeichen, php regex suchen, regexp fragezeichen, php regex suche, php regex fragezeichen, regex datum, php regular expression fragezeichen, php string zerlegen regular expression, php string zerlegen regex, regex suchen php, regular expression fragezeichen, ismu regular expression tutorial, http://www.php.de/php-fortgeschrittene/22380-erledigt-regular-expression-suchen-bis-zum-ersten-suppart.html, js regexp fragezeichen, http://www.php.de/php-fortgeschrittene/22380-regular-expression-suchen-bis-zum-ersten-suppart.html, regex fragezeichen php, regular expressionns und fragezeichen, \use regular expression\

Alle Zeitangaben in WEZ +1. Es ist jetzt 20:12 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.