perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 21
Click for quality!




12.02.2012 / 00:12

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  PHP: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitrageinzelnes zeichen aus einer zeichenkette (skalarvariable) auslese
Seitenanfang
Hallo, ich habe follgendes Problem...

wie kann ich wenn ich eine Zeichenkette (zb satz oder text) in einem skaler habe, eine einzelnes zeichen rausfinden und feststellen wie oft dieses zb in diesem skaler vorkommt?

vielen dank schon einmal...

mfg

felix

Datum: 16.10.2006-21:25

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
Das kannst du über einen einfachen regulären Ausdruck machen:

my $char; # Das Zeichen, das du suchst
my $count = () = $text=~/\\$char/gs;

Der Skalar $text wird per ~=/ / nach $char durchsucht. Das Vorrangestellte Backslash (\) stellt sicher, das auch genau dieses Zeichen gesucht wird, und nicht eine besondere Bedeutung einzelner Zeichen zum Tragen kommt (z.B. eines Punktes).

Wird das Ergebnis des Suchvorganges einer Liste zugewiesen (hier die anonyme Liste () ), werden alle gefundenen Muster aufgelistet. Das Zuweisen dieser Liste an einen Skalar bewirkt, dass die Länge dieser Liste in diesem gespeichert wird, also hier die Anzahl der gefundenen $char.

Datum: 17.10.2006-19:58

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
oh, ich nehme alles zurück, hab mich im Forum geirrt, tut mir leid :-$

Datum: 17.10.2006-20:00

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
hi ich bins nochmal... da ich ja ausversehen ins falsche forum meine frage gestellt habe und jetzt nicht zwei postings betreiben will werde ich einfach hier weiter fragen:)

also ich programmiere nch nicht so lange mit perl und daher kommt das n bissl blöd jetzt aber irgendwie funktioniert diese lösung nicht..... ich weis nicht was ich falsch gemacht haben könnte aber ich kann ja einfach mal ne ganz simple ausführen dieses problems darstellen:


#!/usr/bin/perl -w

use strict;

my $char = "a";
my $text = "BLAblaBlaBla....so hier sollten jetzt 5 as drin sein";


my $count = () = $text=~/\\$char/gs;


print "Anzahl der vorhandenen a: ", $count, "\n";

vielen dank nochmal...

ps sorry wegens des falschen postings...

Datum: 21.10.2006-15:01

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
es darf nur ein backslash sein, nicht zwei.
weiss nicht, wie Skrilax darauf kommt.

Datum: 21.10.2006-17:18

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
aeh, qutasch, es muss statt \\$char natuerlich
\Q heissen (\Q steht fuer quotemeta)
Skrilax hat mich mit seinem backslash etwas irritiert.

Datum: 21.10.2006-17:19

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
Das doppelte Backslash war für den Fall vorgesehen, das ´du z.B. nach einem Punkt (.) suchen willst. Da der Punkt in einem RA eine besondere Bedeutung hat, muss dieser über ein Backslash codiert werden. Funktioniert so aber nicht, wie ich grad beim Testen gesehen habe.

Zum einen muss das Backslash mit in die Variable. Außerdem ergibt sich das Problem, das z.B. \w wiederum eine eigene Bedeutung hat.

Es gibt also zwei Möglichkeiten:
1. Du weißt sowieso schon beim Schreiben des Skriptes nach welchem Zeichen du suchen willst, dann kannst du jene speziellen Zeichen selbst codieren, z.B.

$char="\\.";
$char2="a";

2. Die automatisierte Variante: Dem Zeichen wird nur ein Backslash vorgestellt, wenn es kein(e) Buchstabe oder Zahl ist:
$char = "\\$char" unless ($char=~/\w/);

Noch eine Korrektur:
Deinem Beispiel entnehme ich, dass du zwischen Groß- und Kleinschreibung nicht unterscheiden willst. Dazu musst du dem Regulären Ausdruck noch den 'i'-Parameter übergeben, also:

my $count = () = $text=~/$char/gis;

Bei mir hat es nun mit diesen Korrekturen geklappt.

Datum: 21.10.2006-18:21

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
so hat jetzt auch funktioniert......
vielen dank an alle und besonders an Skrilax ..

und nochmal entschuldigung wegens dem falschen posting^^

Datum: 22.10.2006-10:13

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
"vielen dank an alle und besonders an Skrilax .."

na bitte, wenn du umstaendlich arbeiten willst...
/\Q$char/ finde ich viel einfacher, aber vielleicht gibt es
ja auch leute, die nicht nach stunden bezahlt werden, sondern
nach der anzahl der zeichen im code.
viel spass noch damit.

Datum: 23.10.2006-10:02

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
das ist doch viel zu umstaendlich. quotemeta() bzw. \Q
sollte man hier benutzen. warum hast du das ignoriert?

Datum: 23.10.2006-10:00

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
Tjo, ich kannte quotemeta() bisher noch nicht, und dein Beitrag war etwas verwirrend formuliert.

Es zweifelt wohl aber niemand dran, dass

my $count = () = $text=~/\Q$char/gis

die elegantere Lösung ist. ;-)

Datum: 23.10.2006-18:57

Beitragre: einzelnes zeichen aus einer zeichenkette auslesen
Seitenanfang
jetzt aber für PHP:

for ($c=0;$c<strlen($text);$c++)
{
if($text{$c} == $zeichen) $anzahl++;
}

Da du die selbe Anfrage auch ins Perl-Forum geworfen hast, kann es natürlich sein das wir uns beide in der Hausnummer geirrt haben ;-).
Für die Lösung in Perl siehe zwei Postings weiter oben....

Datum: 18.10.2006-18:36

-






-
-