Gå til innhold

Erstatte først ord + regulære uttrykk


Anbefalte innlegg

Skrevet (endret)

Finnes det noen funksjon som er virker på samme måte som str_replace, men at man kan legge til begrensninger i hvor mange ganger den skal erstatte strengen?

 

Eks:

<?php
$limit = 1;

$text = str_replace('PHP', NULL, 'PHP ASP PERL CGI PHP ASP PERL CGI PHP ASP PERL CGI', $limit);
?>

 

$text blir da ASP PERL CGI PHP ASP PERL CGI PHP ASP PERL CGI (PHP er fjernet i førsten av $text)

Endret av simenss
Videoannonse
Annonse
  • 1 måned senere...
Skrevet

/ / er delimetere som viser alt mellom dem skal søkes etter. Det er mulig å sette flags etter en delimiter, derfor er det viktig å ha /PHP/

Skrevet

Flags, f.eks.:

/PHP/i betyer case insensitive, da ser den etter både php og PHP

/g = global

/x = extended

/s = dotall

/m = multiline

Hvis du vil lære deg regex er google.com er bra sted å begynne. Søk etter regex tutorial. Grunnen til at refererer deg til google.com er at jeg personlig synes ikke det finnes et absolutt beste sted å lære regex. Det kommer med eksempler og trening.

Skrevet (endret)

Har sett i noen funksjoner (f.eks. str_replace) at noen bruker merkelige tegn som [@*^] (dette er kun et eksempel). Hva er alle disse tegnene godt for?

 

 

EDIT: Takker ????? (får ikke skrevet 8 spørsmålstegn), skal se litt nærmere på dette :)

Endret av simenss
Skrevet

I str_replace() betyr de ingen ting annet enn de tegnene, men i alle regex funksjoner som ereg() og preg...() så betyr de litt av hvert.

[a-z] betyr alle bokstaver mellom a og z

^ betyr først, men kan også bety ikke.

* betyr 0 eller fler, f.eks. [0-9]* betyr at det enten er ingen, en eller flere tall mellom 0 og 9 etter hverandre.

 

Listen er lang, tror flere inkl. meg har skrevet en liten guide med noen eksempler her på forumet - de funner den hvis du søker.

 

Se også:

http://no2.php.net/manual/en/reference.pcr...tern.syntax.php

http://www.regularexpressions.info/

http://zvon.org/other/PerlTutorial/Output/index.html

http://www.regexlib.com/

Skrevet

Prøver å forstå dette nå, og har prøvd eksempelet under:

 

<?php
$var = 'dette_er-tekst';

if(ereg("^[a-z]+[_-]*$", $var)) {
print('TRUE');
} else {
print('FALSE');
}
?>

 

Denne koden gir FALSE, noe jeg ikke halt forstår? :dontgetit:

Skrevet

Det er fordi du søker etter:

1. et eller flere tegn a-z

2. så - eller _

 

En string som vil validere der er da

abcdef_-_-

 

Problemet er det at du har delt det opp i to. Prøv:

^[a-z_\-]+$

Skrevet

Men på denne siden validerer de e-mail adresser med følgende:

^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$

Hvorfor er den uthevede teksten delt i to? Hvorfor ikke:

^([0-9a-zA-Z-._+&]+)*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$

Skrevet

([0-9a-zA-Z]+[-._+&])*

 

Se litt nærmere på den. Der står alt innenfor (), med * som betyr at det finne 0, 1 eller flere av dette der.

 

Dvs den leter etter 0-9a-z+ så regner den med å finne noen av de tegnene, så står det * utenfor ), det betyr at mønsteret kan gjenta seg.

 

[0-9a-zA-Z]+

betyr at aaabbb000111 validerer

 

[-._+&] betyr at de tegnene validerer.

 

Hadde det ikke stått noen )* der så hadde du hatt rett.

Skrevet

Litt off topic: Hva er egentlig reglene for e-mail adresser? I overnevnt kode er jo -._+& tillatte tegn i e-mail adresser. Trodde ikke + og & var tillatt jeg? :hmm:

Skrevet

Koden under gir uansett FALSE:

 

<?php
$var = 'min_tekst';

if(ereg("^([0-9a-zA-Z]+[-._+&]){5,15}[0-9a-zA-Z]+$", $var)) {
print('TRUE');
} else {
print('FALSE');
}
?>

Skrevet

Denne skal vel funke:

<?php
$var = 'min_tekst';

if(ereg("^(([0-9a-zA-Z]+[-._+&])*){5,15}[0-9a-zA-Z]+$", $var)) {
print('TRUE');
} else {
print('FALSE');
}
?>

Som da betyr at -._+& ikke nødvendigvis trenger å komme etter 0-9a-zA-z, ettersom jeg har fortsått.

Skrevet
<?php

$var = 'min_tekst';

 

if(ereg("^(([0-9a-zA-Z]+[-._+&])*){5,15}[0-9a-zA-Z]+$", $var)) {

print('TRUE');

} else {

print('FALSE');

}

?>

 

må man ikke escape . (dot) om man bare vil ha punktum med i strengen man søker i? php.net: . match any character except newline (by default)

 

samme med + den betyr jo en eller flere, om den ikke escapes ( \+ )

 

så ville ikke koden bli

<?php
$var = 'min_tekst';

if(ereg("^(([0-9a-zA-Z]+[-\._\+&])*){5,15}[0-9a-zA-Z]+$", $var)) {
print('TRUE');
} else {
print('FALSE');
}
?>

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...