$string = " Some string ";
//the output should look like this
$output = "___Some string__";
したがって、先頭と末尾の各空白はアンダースコアに置き換えられます。
ここでCでこれの正規表現を見つけました:C #で正規表現を使用して、先頭と末尾の空白のみをアンダースコアに置き換えます が、phpで機能させることができませんでした。
$string = " Some string ";
//the output should look like this
$output = "___Some string__";
したがって、先頭と末尾の各空白はアンダースコアに置き換えられます。
ここでCでこれの正規表現を見つけました:C #で正規表現を使用して、先頭と末尾の空白のみをアンダースコアに置き換えます が、phpで機能させることができませんでした。
次のような置換を使用できます。
$output = preg_replace('/\G\s|\s(?=\s*$)/', '_', $string);
\G
文字列の先頭または前の一致の末尾に(?=\s*$)
一致し、次が文字列の末尾にある空白のみの場合に一致します。したがって、この式は各スペースに一致し、それらを_
.
Qtaxが提案したように、先読みで正規表現を使用できます。preg_replace_callback を使用した代替ソリューションは次のとおりです: http://codepad.org/M5BpyU6k
<?php
$string = " Some string ";
$output = preg_replace_callback("/^\s+|\s+$/","uScores",$string); /* Match leading
or trailing whitespace */
echo $output;
function uScores($matches)
{
return str_repeat("_",strlen($matches[0])); /* replace matches with underscore string of same length */
}
?>
このコードは機能するはずです。そうでない場合はお知らせください。
<?php
$testString =" Some test ";
echo $testString.'<br/>';
for($i=0; $i < strlen($testString); ++$i){
if($testString[$i]!=" ")
break;
else
$testString[$i]="_";
}
$j=strlen($testString)-1;
for(; $j >=0; $j--){
if($testString[$j]!=" ")
break;
else
$testString[$j]="_";
}
echo $testString;
?>