Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mit Regular Expression nach einer Zahlenfolge suchen

Frage Entwicklung PHP

Mitglied: Codehunter

Codehunter (Level 2) - Jetzt verbinden

14.07.2009, aktualisiert 18.10.2012, 8300 Aufrufe, 7 Kommentare

Hallo allerseits,

ich möchte mit preg_match einen String auseinander nehmen. In dem String kommen neben diversen alphanumerischen Zeichen auch mehrere Zahlenfolgen vor. Eine dieser Zahlenfolgen hat mindestens 12 Stellen (oder mehr) und wird von je einem beliebigen nicht-numerischen Zeichen abgegrenzt.

Ich möchte erreichen, daß die Zahlenfolge mit mindestens 12 oder mehr Stellen durch preg_match separiert wird. Hier Beispiel-Strings:

Es konnte in 5824 Datensätzen ein Gesamtwert von 970222713953 Einheiten zu je 500 Punken ermittelt werden.
oder
Von 5824 Datensätzen mit insgesamt 970222713953 Einheiten zu je 500 Punken werden 824 ausgetragen.
Für mich von Interesse ist die Zahlenfolge 970222713953 die in den beiden Beispiel-Strings vorkommt. Das Erkennungsmerkmal ist die Länge der Zahlenfolge, die in jedem Fall >= 12 ist.

Grüße
Cody
Mitglied: Arano
15.07.2009, aktualisiert 18.10.2012
Guten Abend !

Hehe, jetzt habe ich länger für das drum herum gebraucht als für den RegEx selber ^^
01.
<?php 
02.
 
03.
echo 'Hilfe fuer Codehunter (http://www.administrator.de/forum/mit-regular-expression-nach-einer-zahlenfolge-suchen-120450.html#comment-039;;) 
04.
 
05.
/* test 1 *
06.
$str = 'Es konnte in 5824 Datensätzen ein Gesamtwert von 970222713953 Einheiten zu je 500 Punken ermittelt werden.'
07.
echo $str.'<br>Einheiten: "'.getEinheiten($str).'"<br><br>'
08.
/* return 970222713953 *
09.
 
10.
/* test 2 *
11.
$str = 'Von 5824 Datensätzen mit insgesamt 970222713953 Einheiten zu je 500 Punken werden 824 ausgetragen.'
12.
echo $str.'<br>Einheiten: "'.getEinheiten($str).'"<br><br>'
13.
/* return 970222713953 *
14.
 
15.
/* mit 10 stellen *
16.
$str = 'Von 5824 Datensätzen mit insgesamt 01234567891 Einheiten zu je 500 Punken werden 824 ausgetragen.'
17.
echo $str.'<br>Einheiten: "'.getEinheiten($str).'"<br><br>'
18.
/* return not available *
19.
 
20.
/* mit buchstaben *
21.
$str = 'Von 5824 Datensätzen mit insgesamt 970222713953d Einheiten zu je 500 Punken werden 824 ausgetragen.'
22.
echo $str.'<br>Einheiten: "'.getEinheiten($str).'"<br><br>'
23.
/* return not available *
24.
 
25.
/* mit langer zahl *
26.
$str = 'Von 5824 Datensätzen mit insgesamt 9702227139530000000000 Einheiten zu je 500 Punken werden 824 ausgetragen.'
27.
echo $str.'<br>Einheiten: "'.getEinheiten($str).'"<br><br>'
28.
/* return 9702227139530000000000 *
29.
 
30.
 
31.
function getEinheiten($str
32.
33.
    /** 
34.
     * $pattern 
35.
     * zeichenkette die mit elf zahlen beginnt, mit mindestens einer weitergeht 
36.
     * und auf ein leehrzeichen endet. den zahlenteil davon geklammert weil wir 
37.
     * das leerzeichen nicht haben moechten 
38.
     */ 
39.
    $strPattern  = '/([0-9]{11}[0-9]+) /'
40.
    $arrHits     = array(); 
41.
    $boolFound   = preg_match($strPattern,$str,$arrHits); 
42.
    if(FALSE == $boolFound
43.
        return 'not available'
44.
    return $arrHits[1]; 
45.
    /** 
46.
     * $arrHits[0] = '123456789123 ' // gesamter ausdruck (mit leerzeichen) 
47.
     * $arrHits[1] = '123456789123'  // erster teilausdruck (erste klammer [ohne leerzeichen]) 
48.
     */ 
49.
50.
 
51.
?>

Gute Nacht
~Arano
Bitte warten ..
Mitglied: Codehunter
15.07.2009 um 08:29 Uhr
Vielen Dank erstmal für deine viele Arbeit! Ich hab mir letztens erst mühsam die Syntax für die Regular Expressions beigebracht die in den .htaccess für RewriteRules verwendet wird und mußte jetzt feststellen daß PHP-intern bei den RegEx-Funktionen wieder eine andere Syntax gilt.

Wie ich Zahlen usw. definiere in einer Expression war ja auch so nicht das Problem sondern wie ich vorgebe daß es mindestens 12 aufeinanderfolgende sein müssen.

Bei deinem Beispiel gibts noch ein kleines Problemchen. Die gesuchte Zahl beginnt und endet nicht zwangsläufig mit einem Leerzeichen. Im Text kommt praktisch alles vor: Buchstaben, Klammern, Kommatas, Rauten...

Also habe ich noch ein bisschen gehirnt und die Zeile mit dem Pattern so geändert:
01.
$strPattern  = '/([0-9]{11}[0-9]+)[^\d]/';
Ich hoffe daß ich damit jetzt keine Unschärfen eingebaut habe. Was meinst du? Zumindest an deinem Testscript funktioniert es zuverlässig.
Bitte warten ..
Mitglied: nxclass
15.07.2009 um 08:57 Uhr
... sollte das nicht auch gehen !?:

01.
$strPattern  = '/([0-9]{12,})/';
Bitte warten ..
Mitglied: Codehunter
15.07.2009 um 09:04 Uhr
@nxclass: Nach dem ersten Test scheint das auch zu funktionieren.

Ich brauch unbedingt mal mehr Literatur zu RegEx. Solche Konstrukte wie "{12,}" habe ich noch nirgends gesehen...
Bitte warten ..
Mitglied: Arano
15.07.2009 um 11:19 Uhr
" Ich brauch unbedingt mal mehr Literatur zu RegEx "
http://www.regular-expressions.info/index.html

" Solche Konstrukte wie "{12,}" habe ich noch nirgends gesehen... "
http://www.regular-expressions.info/reference.html (am ende)

Hier gibts noch ich paar super CheatSheets, sehr pracktisch:
http://www.addedbytes.com/cheat-sheets/


~Arano
Bitte warten ..
Mitglied: nxclass
15.07.2009 um 20:34 Uhr
CheatSheets : Cool - sowas ist immer nützlich und RegEx ist schon fasst eine Wissenschaft für sich.
Bitte warten ..
Mitglied: Codehunter
16.07.2009 um 08:04 Uhr
Seh ich auch so... Habs mir gleich ausgedruckt und einlaminiert

Danke!
Bitte warten ..
Ähnliche Inhalte
Entwicklung
gelöst Benötige Hilfe bei Regular Expression (6)

Frage von Thomas91 zum Thema Entwicklung ...

Datenbanken
Reguläre Ausdrücke in MSSQL dynamisch zusammensetzen (2)

Frage von Androxin zum Thema Datenbanken ...

Java
Frage zu Print When Expression im Jaspersoft Studio (2)

Frage von helmuthelmut2000 zum Thema Java ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Rechtliche Fragen
gelöst Geschäftsführer Email gefaked (18)

Frage von xbast1x zum Thema Rechtliche Fragen ...

Vmware
VMware ESX - Start einer VM verhindern (16)

Frage von emeriks zum Thema Vmware ...

Vmware
gelöst Update auf ESXI 6.5 Installieren (15)

Frage von zeroblue2005 zum Thema Vmware ...

iOS
IPhone wird ferngesteuert Hacker? (15)

Frage von Akcent zum Thema iOS ...