Avatar billede decrypto Nybegynder
22. december 2006 - 10:31 Der er 19 kommentarer og
1 løsning

Hvordan kan jeg isolere en streng hvori der står noget i '(xxx)'

Jeg har en streng hvori jeg har nogle numre, noget tekst og måske en tekstreng mere i paranteser.

Hele strengen er: " streng1 streng2 (streng3)"
streng1 er numeriske.
streng2 er tekst.
streng3 som står i parantes.

Jeg vil gerne kunne udvinde disse tre strenge og putte dem i 3 variabler.


er der nogle forslag?
Avatar billede decrypto Nybegynder
22. december 2006 - 10:41 #1
Det skal lige tilføjes, at streng tre er optional, dvs. at den ikke altid forekommer. Yderligere skal strengen gemmes i en variabel uden paranteserne.
Avatar billede gizmo-gizmo Nybegynder
22. december 2006 - 10:50 #2
Et bud:

$str = "12345 tekst streng (parentes ting)";

preg_match("/([0-9]*) (.*?) \((.*?)\)/", $str, $dele);

echo $dele[1] . "<br>";
echo $dele[2] . "<br>";
echo $dele[3] . "<br>";
Avatar billede gizmo-gizmo Nybegynder
22. december 2006 - 10:55 #3
Hov, havde ikke lige set at det var Reg.Exp kategorien.  Anyway... så burde:
/([0-9]*) (.*?) \((.*?)\)/
være svaret afhængig af hvilken implementation du bruger.
Avatar billede gizmo-gizmo Nybegynder
22. december 2006 - 11:00 #4
Ovenstående bud virker kun hvis parentesen er minimum tom (og ikke hvis den slet ikek er der). Hvad med:
/([0-9]*) ([^(]*)(\((.*?)\))?/
Så bliver det $1, $2 og $4  der indeholder de rigtige dele.
Avatar billede decrypto Nybegynder
22. december 2006 - 11:16 #5
Hmmm det er godt nok .net og c# og ikke php....

men udtrykket kan vel bruges.....

de to første udtryk har jeg på plads. Det er mere den sidste streng som står parantes der driller. streng3 er enten i parantes ellers er den ikke tilstede. Der er ikke et minimum af en tom parantes.
Avatar billede decrypto Nybegynder
22. december 2006 - 11:17 #6
Jeg bruger iøvrigt regulator til at teste....
Avatar billede decrypto Nybegynder
22. december 2006 - 11:25 #7
Jeg har lige fået testet i regulator.....og det virker sålænge der er noget i parantes, men hvis der ikke findes en streng3, så virker det resterende ikke. Kun hvis jeg viser en tom parantes. Hvilket jeg jo aldrig vil gøre.

Hvordan kan man lave udtrykket så, den stadigvæk virker, selvom der ikke er noget streng3 ?
Avatar billede gizmo-gizmo Nybegynder
22. december 2006 - 11:39 #8
Hvis min streng er:
"12345 tekst streng"
og mit udtryk er:
/([0-9]*) ([^(]*)(\((.*?)\))?/
Så kommer $1 til at indeholde "12345" og $2 til at indeholde "tekst streng"
Avatar billede decrypto Nybegynder
22. december 2006 - 11:48 #9
hmmmm egentligt kan tekstrengen godt se således ud:

"12345 tekst (streng)" el. "tekst 12345 (streng)"
For begge tilfælde gælder følgende altid.

var tal =  12345
var t1 = tekst
var t2 = streng
Avatar billede decrypto Nybegynder
22. december 2006 - 11:51 #10
t2 forekommer ikke altid.
Avatar billede decrypto Nybegynder
22. december 2006 - 11:53 #11
Faktisk kan tal eller t1 også stå alene, så tekststrengen sagtens kan se således ud:

"12345" el. "tekst"
Avatar billede gizmo-gizmo Nybegynder
22. december 2006 - 11:56 #12
Øjeblik... jeg finder lige ud af hva fanden det er jeg har gang i :-)
Avatar billede gizmo-gizmo Nybegynder
22. december 2006 - 12:05 #13
Det her burde altså virke:

^([0-9]+) ([^\(]+)(\([^\)]*\))?
Avatar billede gizmo-gizmo Nybegynder
22. december 2006 - 12:08 #14
Ohh... jeg tror jeg misforstår.  Streng1 (tal) og Streng2 kan være byttet rundt i din streng.
Avatar billede elskermad.dk Nybegynder
22. december 2006 - 12:14 #15
hvad med

^(\d+) (.+?)(\((.+)\))?$
Avatar billede decrypto Nybegynder
22. december 2006 - 12:19 #16
Den sidste er ret tæt på, men jeg skal kun bruge indholdet af det der er i parantesen.
Avatar billede decrypto Nybegynder
22. december 2006 - 12:28 #17
derudover virker det sidste forslag ikke med ting der kan stå alene....

mine test data er:

25 Jens (Hallo)
2650 Mette (hey)
Mette 2650 (hey)

osv.
Avatar billede decrypto Nybegynder
22. december 2006 - 13:09 #18
25 Jens (Hallo)
2650 Mette (hey)
2650
25 Jens
Avatar billede decrypto Nybegynder
22. december 2006 - 13:46 #19
Her er mine gruperinger:
(?<n1>\d{3,4})?
(?<t1>[^\d{3,4}]*)?
\((?<t2>.*?)\)

Jeg har problemer hvis:
1. Der ikke er nogen parantes m. indhold.
2. Hvis der kun er n1.
3. Hvis der kun er t1.

Udtrykket virker kun hvis alle tre ting er der, hvilket de ikke altid er.
Avatar billede decrypto Nybegynder
02. januar 2007 - 12:42 #20
Jeg fik det fixet....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester