0

一般的に正規表現に関する多くの質問がここにありますが、問題は、それらが通常 (私のように) かなりローカライズされており、正規表現の専門家でない場合は推測するのが難しいことです..

私の文字列には、正規表現をより困難にすることで知られている引用符やブレースなどの文字が含まれています。

このタスクを実行するために必要な式文字列 (検索、置換) を知りたいです。

言い換えれば、で:

 ereg_replace (string pattern, string replacement, string subject) 

string patternand式が必要になりstring replacementます。

私の弦は

array('val' => 'something', 'label' => 'someword'),

最後の部分を変更する必要があります:

'label' => 'someword'),

'label' => __('someword','anotherstring')),

そのためにphpを使用しますが、メモ帳++でテストしたいと思います(他の場合にも使用します)。(文字列の検索と置換に関して実際に何かを変更するかどうかはわかりません)。

someword文字列は、またはまたは場合によってはまたは場合もあることSomeWordSOMEWORD注意Some wordしてください。つまり、Some_Wordスペース、アンダースコア、または実際には内部のほぼすべての文字を含めることができます...)

編集I:__()もちろん、その部分は翻訳用のワードプレスのテキストドメイン機能であることを忘れていました。例えば__('string','texdomain')

編集II:

コメントであまりにも緊急または要求が厳しい場合は申し訳ありませんが、他の場合にはうまくいかない可能性のある解決策をコピーして貼り付けるだけでなく、理解しようとしています.. :-)

編集III:

このツールのおかげで、私の基本的な誤解は、正規表現内で VARIABLES を使用できる可能性があるということであることがわかりました。$1実際、理解を深めるために必要なのはこれだけです。

notepad ++でも機能する(信じられないほど単純な)パターン

Pattern: 'label' => ('.*')

Replace: 'label' => __(\1,'textdomain')

(notepad++ では Tag Region (var ではなく) と呼ばれ、次のようにマークされます。\1

4

3 に答える 3

1

質問パターンの特定の入力と出力に対して、'label' => ('.*')文字列を照合して置換を実行するには十分です。このパターンは、文字列の次の部分に一致します: 'label' => の間の任意の文字'。中かっこ内のパターンの一部は、後で でアクセスできる間にある任意の文字'$1をグループ化します。例えば:

$str = "array('val' => 'something', 'label' => 'some testing string_with\$specialchars\/'),";
$str = preg_replace('/\'label\' => (\'.*\')/', '\'label\' => __($1, \'some other string\')', $str);
echo $str;
//Outputs:
//   array('val' => 'something', 'label' => __('some testing string_with$specialchars\/', 'some other string')),
于 2013-02-14T07:27:23.210 に答える
1

常にキーを探している場合は、次のlabelようなことができるはずです。

$pattern = "/array\((.*), 'label' => '(.*)'/U";
$added_string = 'anotherstring';
$replacement = 'array($1, ' . "'label' => __('" . '$2' . "','$added_string'";
$final_string = preg_replace($pattern, $replacement, $original_string);
于 2013-02-14T07:13:20.883 に答える
0
<?php
$strings = array('some word', 'some Word', 'SOMEword', 'SOmE_Word', 'sOmE_ WOrd');
$pattern = '/([a-z]+)([^a-z]*)([a-z]+)/i';
foreach($strings as $v){
 echo preg_replace($pattern, 'otherword', $v)."<br>";
}
?> 

出力:

otherword
otherword
otherword
otherword
otherword

編集:

$pattern = "/('label'\s=>\s')(([a-z]+)([^a-z]*)([a-z]+))('\),)/i";
$otherword = 'otherword';
$replacement = "'label' => __('$2','$otherword')),";
echo preg_replace($pattern, $replacement, "'label' => 'someword'),");

出力:

'label' => __('someword','otherword')),

デモ

于 2013-02-14T07:01:13.410 に答える