Jump to content
php.lv forumi

Problēmas ar regexpiem


andrisp

Recommended Posts

Tā, te man ir tāda neveikla regexpu čupa, kas nestrādā īsti kā vajadzētu.

 

Doma ir izfiltrēt no stringa visus SIA AS A/S IK utt..

 

Problēma vispār ir tajā, ka, piem., stringam 'Dzelzceļsabiedrība AS a/s' pirmais AS tiek izgriezts, bet otrais ne, jo abiem pārklājās \s pa starpu. Ieteikumi, lai tiktu izgriezti abi ? Un vispār varbūt varat ieteikt kā uzrakstīt īsāk šos regexpus?

 

 

$val = 'Dzelzceļsabiedrība AS a/s ';
$excl = array('/\s+sia\s+/i', '/\s+as\s+/i', '/\s+a\/s\s+/i', '/\s+ik\s+/i', '/\s+i\/k\s+/i', '/\s+zs\s+/i', '/\s+z\/s\s+/i', '/\s+iu\s+/i', '/\s+i\/u\s+/i', '/^sia\s+/i', '/^as\s+/i', '/^a\/s\s+/i', '/^ik\s+/i', '/^i\/k\s+/i', '/^zs\s+/i', '/^z\/s\s+/i', '/^iu\s+/i', '/^i\/u\s+/i', '/\s+sia$/i', '/\s+as$/i', '/\s+a\/s$/i', '/\s+ik$/i', '/\s+i\/k$/i', '/\s+zs$/i', '/\s+z\/s$/i', '/\s+iu\$/i', '/\s+i\/u$/i');
$val = preg_replace($excl, '', $val);
print_r($val);

Link to comment
Share on other sites

<?php
if (!function_exists('escapeExpression')) {
function escapeExpression($s) {
	return preg_replace('/([\/\\\+\-\^\(\)\[\]\.\*\?\$])/', '\\\${1}', $s);
}
}
$val = 'Dzelzcelsabiedribas AS AS a/s ik';
$excl = Array('sia', 'as', 'a/s', 'ik', /*utt*/);
foreach ($excl as $key => $value) {
$excl[$key] = '/\b' . escapeExpression($value) . '\b/i';
}

$val = preg_replace($excl, '', $val);
echo $val;
?>

Link to comment
Share on other sites

Paldies, strādā.

 

Bet turpinot par tēmu:

 

Ir fails utf-8 kodējumā.

 

Izpildot zemāk redzamo kodu, tiek izdots 'Glaanznsakninnu rniakainsi' nevis 'Glazskunu rukisi' kā būtu paredzēts.

 

<?php
function rem_lv_chars($str) {
$ko = array('/[Āā]/','/[Čč]/','/[Ēē]/','/[Ģģ]/', '/[Īī]/','/[Ķķ]/','/[Ļļ]/', '/[Ņņ]/','/[Ōō]/','/[Šš]/', '/[Ūū]/','/[Žž]/');
$ar = array('a','c','e','g','i','k','l','n','o','s','u','z');
$str = preg_replace($ko, $ar, $str);
return $str;
}
echo rem_lv_chars('Glāžšķūņu rūķīši');
?>

Edited by andrisp
Link to comment
Share on other sites

$ko = array('/Ā/','/Č/','/Ē/','/Ģ/', '/Ī/','/Ķ/','/Ļ/', '/Ņ/','/Ō/','/Š/', '/Ū/','/Ž/','/ā/','/č/','/ē/','/ģ/', '/ī/','/ķ/','/ļ/', '/ņ/','/ō/','/š/', '/ū/','/ž/',);
$ar = array('A','C','E','G','I','K','L','N','O','S','U','Z', 'a','c','e','g','i','k','l','n','o','s','u','z');

 

, jo [Āā] tiek uztverts kā 4 simboli - katrs burts - divi ASCII simboli (tautas valodā - ķeburi).

 

P.S. Un bubu kā parasti taisnība... :) Iepriekšējā gadījumā bija vajadzība, jo SIA var visādi uzrakstīt - Sia, sIA, SIA... un vēl visādi vārdu atdalītāji tad jādefinē pašam...

Edited by GedroX
Link to comment
Share on other sites

Pareizi jau ir, tikai tāpat nesmuki izskatās:

function rem_lv_chars($str) {
$ko = array('ā','č','ē','ģ','ī','ķ',
						'ļ','ņ','ō','š','ū','ž',
						'Ā','Č','Ē','Ģ','Ī','Ķ',
						'Ļ','Ņ','Ō','Š','Ū','Ž');
$ar = array('a','c','e','g','i','k',
						'l','n','o','s','u','z',
						'a','c','e','g','i','k',
						'l','n','o','s','u','z');
$str = str_replace($ko, $ar, $str);
return $str;
}

 

Mēģināju jau arī strtolower, lai nebūtu dubultā viss jāraksta, bet lielie latviešu simboli nepareizi konvertējās.

Link to comment
Share on other sites

array(

 

'ā','č','ē','ģ','ī','ķ',

'ļ','ņ','ō','š','ū','ž',

'Ā','Č','Ē','Ģ','Ī','Ķ',

'Ļ','Ņ','Ō','Š','Ū','Ž'

 

);

 

array(

 

'a','c','e','g','i','k',

'l','n','o','s','u','z',

'a','c','e','g','i','k',

'l','n','o','s','u','z'

 

);

 

Točna zeņitkas!!!! o_O

Edited by GedroX
Link to comment
Share on other sites

×
×
  • Create New...