Qued Posted April 19, 2005 Report Share Posted April 19, 2005 (edited) Ņemos jau labu laiciņu, bet nevaru iebraukt, kā ar regulāro izreiksmi "nomatčot" sekojošu stringu: jāatrod substrings, kas sākas ar (newline+"-"+space), bet beidzas pirms ((newline, kam neseko "-") vai (stringa beigām)). Substrings satur newlines. Vai kāds varētu, lūdzu, palīdzēt? Edited April 19, 2005 by Qued Link to comment Share on other sites More sharing options...
bubu Posted April 19, 2005 Report Share Posted April 19, 2005 (edited) Tu tā dīvaini saki: substrings var saturēt \n, bet arī substrings beidzas uz \n vai $. Kā lai tas zin, kurš \n ir patreiz - tas uz kā beidas, vai tas uz kas pa vidam? Ja tavs substrings drīkst saturēt tikai tos \n, kuriem seko - (jo beigu \n nedīkst saturēt aiz sevīm -), tad labākais, kas man sanāk: <?php $text = "tekst1 \n- vajadziigs teksts1 \n-turpinaajums aiz enter\n nederiigs\n- deriigs"; if (preg_match_all("@\n- (.+)\n[^-]|\n- (.+)$@msU", $text, $m)) { echo "matches:\n"; for ($i=0; $i<count($m)-1; $i++) { echo "---- match ----\n"; echo ($m[1][$i]=='' ? $m[2][$i] : $m[1][$i]); } } else { echo 'no match'; } ?> Piemēra tekstam tiks nomačots "vajadziigs teksts1 \n-turpinaajums aiz enter" un "deriigs" (bez pēdiņām, protams) Edited April 19, 2005 by bubu Link to comment Share on other sites More sharing options...
рпр Posted April 19, 2005 Report Share Posted April 19, 2005 iisti nevar saprast ko tu domaaji. /\n\-[:space:]/ Link to comment Share on other sites More sharing options...
Qued Posted April 19, 2005 Author Report Share Posted April 19, 2005 > drīkst saturēt tikai tos \n, kuriem seko - tieši tā. Liels paldies, izteiksme atrod vajadzīgo substringu! Viena problēma tikai - es jamo lieku iekš preg_replace - šis uz \\0 paķer līdzi arī pirmo burtu no tā teksta, kas aiz beigām it kā. Tipa, ja teksts ir ------------------- kakis - kakis 1; - kakis 2; suns ------------------- tad paņem ------------------- - kakis 1; - kakis 2; s ------------------- Link to comment Share on other sites More sharing options...
bubu Posted April 19, 2005 Report Share Posted April 19, 2005 \\0 jau attiecās uz visu nomačoto izteiksmi tak. Tāpēc es jau tam $m[] masīvam ņēmu vai nu 1 vai 2 elementu, nevis 0. Link to comment Share on other sites More sharing options...
Qued Posted April 19, 2005 Author Report Share Posted April 19, 2005 (edited) Aha. Ja ņem pirmo, tad ir labāk, bet tālākajam tekstam pirmais burts tāpat paliek norauts. tipa tā: --------------- kakis {apstrādāts matčotais strings} uns --------------- apstrādāju apmēram tā: $output=preg_replace("izteiksme","<div>\\1</div>",$input); Edited April 19, 2005 by Qued Link to comment Share on other sites More sharing options...
Qued Posted April 19, 2005 Author Report Share Posted April 19, 2005 Ok, paldies. Izlīdzējos šitā: $output=preg_replace("@(\n- (.+)\n)([^-])|(\n- (.+))$@msU","<div>\\1\\4</div>\\3",$input) Tā ir ok? Link to comment Share on other sites More sharing options...
Qued Posted April 20, 2005 Author Report Share Posted April 20, 2005 bubu cita starpā... ko apzīmē "@"? Sākumu un beigas? Ko nozīmē msU beigās? Tie ir kaut kādi atslēgas parametri? Link to comment Share on other sites More sharing options...
Venom Posted April 20, 2005 Report Share Posted April 20, 2005 @ - ir regex atdalītājs no t.s. modifieriem (parasti tas ir /) msU - tieši ir modifieri m(PCRE_MULTILINE) lai apstrādā vairākas līnijas, nevis tikai pirmo (pēc defaulta), s (PCRE_DOTALL) ļauj iekļaut \n simbolus atrastajā, U (PCRE_UNGREEDY) - meklēt īsāko sakrītošo stringu Link to comment Share on other sites More sharing options...
bubu Posted April 20, 2005 Report Share Posted April 20, 2005 Par @ atdalītāju / vietā esmu pieradis likt tāpēc, ka citādi parsējot HTML tegus, kuros ir / simbols (piemēra </div>) tad nākas to eskeipot: preg_match('/\<\/div\>/', ...). Nesmuki izskatās, taču lietojot @ simbolu: preg_match('@\</div\>@', ...) ir nedaudz labāk saprotams uzreiz. Protams, ja vajg regulārā izteiksmē pašu @ simbolu, tad var lietot citu retu simbolu par atdalītāju, piemēram, ~ utt Link to comment Share on other sites More sharing options...
Qued Posted April 21, 2005 Author Report Share Posted April 21, 2005 bubu heh, man kā reiz tajā izteiksmē e-pasta adreses iekšā. Bet strādā. Paldies - arī par skaidrojumu. Link to comment Share on other sites More sharing options...
bubu Posted April 21, 2005 Report Share Posted April 21, 2005 Nē nu tas, ka ir pašā tekstā tas jau nekas. Galvenais, ka rakstot reg.izteiksmi tur tev nevajag lietot to @ simbolu, jo citādi to uzskatīts par atdalītāju nevis machošanai vajadzīgu simbolu. Link to comment Share on other sites More sharing options...
Venom Posted April 21, 2005 Report Share Posted April 21, 2005 @[a-z0-9_.]+\@[a-z0-9_.]+\.[a-z]+@ resp. \@ Link to comment Share on other sites More sharing options...
bubu Posted April 21, 2005 Report Share Posted April 21, 2005 Man tā eskeipošana nepatīk. Nesmuki. Tad jau labāk: ~[a-z0-9_.]+@[a-z0-9_.]+\.[a-z]+~ Link to comment Share on other sites More sharing options...
Venom Posted April 21, 2005 Report Share Posted April 21, 2005 nu es par to, ka ja tomēr trāpās tas delimiter simbols Link to comment Share on other sites More sharing options...
Recommended Posts