php mb ereg,mb_ereg_replace

用户评论:

[#1]

marco at thenetworksolution dot it [2014-02-03 14:47:54]

To selectively uppercase parts of a string via mb_eregi_replace

$str = mb_eregi_replace('\b([0-9]{1,4}[a-z]{1,2})\b', "strtoupper

('\\1')", $str, 'e');

Full example, how to fix an address manually typed, uppercasing the first letter of a words and keeping uppercase roman numerals and the letters A,B,C after the house number):

function ucAddress($str) {

// first lowercase all and use the default ucwords

$str = ucwords(strtolower($str));

// let's fix the default ucwords...

// uppercase letters after house number (was lowercased by the strtolower above)

$str = mb_eregi_replace('\b([0-9]{1,4}[a-z]{1,2})\b', "strtoupper

('\\1')", $str, 'e');

// the same for roman numerals

$str = mb_eregi_replace('\bM{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\b', "strtoupper('\\0')", $str, 'e');

return $str;

}

Dr. Marco Marsala

Network Solution srl

http://www.realizzazionesitigenova.it

[#2]

marco at thenetworksolution dot it [2014-02-03 14:47:37]

To selectively uppercase parts of a string via mb_eregi_replace

$str = mb_eregi_replace('\b([0-9]{1,4}[a-z]{1,2})\b', "strtoupper

('\\1')", $str, 'e');

Full example, how to fix an address manually typed, uppercasing the first letter of a words and keeping uppercase roman numerals and the letters A,B,C after the house number):

function ucAddress($str) {

// first lowercase all and use the default ucwords

$str = ucwords(strtolower($str));

// let's fix the default ucwords...

// uppercase letters after house number (was lowercased by the strtolower above)

$str = mb_eregi_replace('\b([0-9]{1,4}[a-z]{1,2})\b', "strtoupper

('\\1')", $str, 'e');

// the same for roman numerals

$str = mb_eregi_replace('\bM{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\b', "strtoupper('\\0')", $str, 'e');

return $str;

}

[#3]

trng [2011-06-15 09:22:22]

You can use \\n for capture group in replacement.

And you can NOT use $n notation (unlike preg_replace function).

[#4]

Pluche [2010-12-30 04:17:08]

Unlike preg_replace, mb_ereg_replace doesn't use separators

Exemple with preg_replace :

<?php  $data=preg_replace("/[^A-Za-z0-9\.\-]/","",$data); ?#=#>Exemple with mb_ereg_replace:

[#5]

daemoneye at gmail dot com [2009-02-03 02:53:20]

I got a pretty nasty error while trying to parse table rows(all contents were set to UTF-8) from the database for a dictionary project. The idea was to get all the rows from the first table (that is a table with bulgarian phrase in the first field, and its translation in english, french and german in the next fields). I needed to index all the bulgarian words that are found in the table to make an intelligent search. And that is where my headache started.

First of all, even with mb_strtolower() a lot of cyrillic characters went corrupted (ex: '??,??,??,??,??,??,??,??,' etc...). After an hour of different attempts I got such a solution:

mb_internal_encoding("UTF-8");mb_regex_encoding("UTF-8");$rows=$db->getRows();$contents= array();

foreach ($rowsas$eachRow)

{$cleared=str_replace($commonWords,' ',mb_strtolower(stripslashes($eachRow['bulgarian']),'UTF-8'));

if (trim($cleared) !='')$contents[] =trim($cleared);

}$list= array();

foreach ($contentsas$eachRow)

{$exploded=explode(' ',$eachRow);

foreach ($explodedas$eachExpl)

{$eachExpl=mb_ereg_replace('[^??-?? ]',' ',$eachExpl);

if (trim($eachExpl) !='')

if (!in_array($eachExpl,$list,true))$list[] =trim($eachExpl);

}

}?>

To work properly I got to set all the internal encoding settings to UTF-8. Else the default Latin-1 got half my database with missing characters.

I am posting this solution just in case someone has encountered a similar problem. Hope it helps you in case you need something like that.

[#6]

keizo at gomo dot jp [2008-07-23 21:32:30]

$pattern="([??-??]+)[0-9]+";$string=mb_ereg_replace($pattern,'??\\1??:\\0',$string);?>

you can use \\n for capture group in replacement

[#7]

gmx dot net at ulrich dot mierendorff [2008-07-01 07:39:43]

If you want to replace characters like "?" or "?" you can use mb_ereg_replace, but it is very slow. str_replace is much faster and also works with characters like "?" or "?"!

I think this has something to with the fact that str_replace works on byte level and does not care about characters.

I hope that can help.

[#8]

[2006-12-04 08:36:33]

'i' option does not work correctly with multibyte characters. The function does not locate/replace the multibyte string if it's different case then specified on multibyte needle which is in different case.

[#9]

squeegee [2006-11-01 07:41:01]

well, if you just calculated the length of the find and replace strings once instead of on every loop, it would likely speed it up a lot.

[#10]

mpnicholas [@t] gmail (dot) com [2006-07-09 15:09:53]

Regarding the mb_str_ireplace() function: I benchmarked it against mb_eregi_replace() for single-character substitution, and it was significantly slower. Despite avoiding the ereg call, I think the while loop ends slowing you down too much for this to be practical.

[#11]

vondrej(at)gmail(dot)com [2006-02-26 15:47:52]

Are you looking for htmlentities() for multibyte strings? This might help you - it just replace , ", '

<?phpfunctionmb_htmlentities ($str,$encoding='utf-8') {mb_regex_encoding($encoding);$pattern= array('<','>','"','\'');$replacement= array('<','>','"',''');

for ($i=0;$i

}

return$str;

}?>

[#12]

faxe at neostrada dot pl [2005-08-09 15:52:41]

A simple mb_str_ireplace() implementation - a faster (?) replacement for non-regexp multi-byte string replacement:

{$wCzymM=mb_strtolower($wCzym);$coM=mb_strtolower($co);$offset=0;

while(!is_bool($poz=mb_strpos($wCzymM,$coM,$offset)))

{$offset=$poz+mb_strlen($naCo);$wCzym=mb_substr($wCzym,0,$poz).$naCo.mb_substr($wCzym,$poz+mb_strlen($co));$wCzymM=mb_strtolower($wCzym);

}

return$wCzym;

}?>

[thiago - EDITOR NOTE: This function has improvements from d-okumura [aat] fi{dot}kyd[dot]co.jp]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值