0
$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';

今私は持っています:

$value = preg_replace('/(^.+)(?=:)/e', "strtolower('\\1')", $value);

この出力

$value='x-cem-date:wed, 16 dec 2009 15:42:28 GMT';

次のように出力されます。

$value='x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT';
4

6 に答える 6

3

正規表現は次のようになります。

/(^.+?)(?=:)/

違いは+?性格です。これ+?は貪欲ではありません。つまり、次の一致までのMOST文字ではなく、式が式内の次の一致に移動するまでの文字数が最小になります。

于 2009-12-16T16:07:39.847 に答える
2

正規表現の代わりにexplode()andを使用することを検討してください。implode()

$value_a = explode( ':', $value );
$value_a[0] = strtolower( $value_a[0] );
$value = implode( ':', $value_a );
于 2009-12-16T16:05:01.440 に答える
1

試す

preg_replace('/([\w-]+?)(:[\w\d\s\:\,]+)/e', "strtolower('\\1') . '\\2'", $value);

少なくとも、投稿した例では機能します。

于 2009-12-16T16:09:10.230 に答える
1

参考までに、これは使用しているバージョンですpreg_replace_callback

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';

function callback($text){return(strtolower($text[0]));}

echo preg_replace_callback("/^([^:]+:)/","callback",$value);

出力

x-cem-date:Wed, 16 Dec 2009 15:42:28 GMT
于 2009-12-16T16:09:29.393 に答える
1
echo preg_replace('~^[^:]+~e', 'strtolower("$0")', $value);
于 2009-12-16T16:12:15.597 に答える
1

一致する正規表現を試してください

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_match('/(^.+)(?=:)/e', $value, $matches); 
print_r ($matches) . "\n";

これは出力する必要があります

Array
(
    [0] => x-Cem-Date:Wed, 16 Dec 2009 15:42
    [1] => x-Cem-Date:Wed, 16 Dec 2009 15:42
)   

代わりにこれを試してください

$value='x-Cem-Date:Wed, 16 Dec 2009 15:42:28 GMT';
$value = preg_replace('/(^.+?:)/e', "strtolower('\\1')", $value);   
echo $value . "\n";

そこ?にあるので、regexは貪欲ではなく、必要以上につかんでいません。

于 2009-12-16T16:13:52.343 に答える