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, 8089 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Linux
Chemnitzer Linux-Tage 2017 suchen nach Beiträgen

Link von runasservice zum Thema Linux ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...