0

我在这里看到很多关于正则表达式的问题,但问题是它们通常(像我的一样)非常本地化,如果不是正则表达式专家,很难推断出来。

我的字符串包含引号和大括号之类的字符,它们以使正则表达式变得更加困难而闻名。

我想知道执行此任务所需的表达式字符串(搜索、替换)。

换句话说,在:

 ereg_replace (string pattern, string replacement, string subject) 

我将需要string patternandstring replacement表达式。

我的字符串是

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

我需要更改最后一部分:

'label' => 'someword'),

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

我将为此使用 php,但我也想使用 Notepad ++ 对其进行测试(并在其他情况下使用)。(我不知道它是否真的改变了搜索和替换字符串)。

请注意,字符串someword也可以是SomeWordSOMEWORDSome word至或大小写Some_Word,这意味着它可以包含空格、下划线或实际上几乎任何来自内部的字符......)

编辑一:忘了说这__()部分当然是用于翻译的 wordpress 文本域功能。例如__('string','texdomain')

编辑二:

很抱歉,如果我在评论中过于苛刻或要求太高,我确实会尝试理解,而不仅仅是复制粘贴在其他情况下可能对我不起作用的解决方案.. :-)

编辑三:

在这个工具的帮助下,我了解到我的基本误解是在 regex 中使用 VARIABLES 的可能性。这$1实际上是我更好理解所需要的。

在记事本++中也可以使用的(非常简单的)模式

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

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

(在记事本++中,它被称为标签区域(不是var),它被标记为\1

4

3 回答 3

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 回答
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 回答
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'),");

输出:

'标签' => __('someword','otherword')),

演示

于 2013-02-14T07:01:13.410 回答