0

これは正規表現で行うことができますか?

x-example-HEADER:teSt は x-example-header:teSt になります

y-exaAMPLE:testoneTWOthree は y-example:testoneTWOthree になります

4

4 に答える 4

4

使用preg_replace_callback():

$output = preg_replace_callback('![a-zA-Z]+:!', 'to_lower', $input);

function to_lower($matches) {
  return strtolower($matches[0]);
}

それ以外の場合は、特定の場合を除き、正規表現で大文字と小文字を変換することはできません (たとえば、'A' を 'a' に置き換えることが可能です)。

編集:わかりました、あなたは毎日何か新しいことを学びます. あなたはこれを行うことができます:

$output = preg_replace('![a-zA-Z]+:!e', "strtoupper('\\1')", $input);

パターン修飾子から:

e (PREG_REPLACE_EVAL)

この修飾子が設定されている場合、 preg_replace()は、置換文字列で後方参照の通常の置換を行い、それを PHP コードとして評価し、その結果を検索文字列の置換に使用します。一重引用符、二重引用符、バックスラッシュ ()、および NULL 文字は、置換後方参照でバックスラッシュによってエスケープされます。

preg_replace()のみがこの修飾子を使用します。他の PCRE 関数では無視されます。

ただし、特にユーザー入力と組み合わせると、非常に危険な行為になる可能性があるため、文字列を eval() することは避けます。preg_replace_callback()私は一般的なルールとしてアプローチを好むでしょう。

于 2009-12-10T15:57:23.053 に答える
3

あなたはpreg_replace_callbackを見てみるかもしれません

于 2009-12-10T15:53:58.320 に答える
3

置換の一部として PHP コードを呼び出すために、(そのページの例 #4 を見てください) に与えられたときに正規表現パターンでe修飾子を使用できます。preg_replace

$string = "x-example-HEADER:teSt";
$new_string = preg_replace('/(^.+)(?=:)/e', "strtolower('\\1')", $string);
// => x-example-header:teSt

このパターンは、最初のコロンの前のすべてを最初の後方参照に取り込み、それをstrtolower関数に置き換えます。

于 2009-12-10T15:58:46.793 に答える
2
$str = 'y-exaMPLE:testoneTWOthree';
function lower( $str ) {
    return strtolower( $str[1] );
}

echo preg_replace_callback( '~^([^:]+)~', 'lower', $str );
于 2009-12-10T16:00:26.713 に答える