php - 正则表达式用大括号和引号替换字符串

时间:2013-02-14 06:46:13

标签: php regex wordpress notepad++

我在这里看到很多关于正则表达式的问题,但问题是它们通常(像我的)非常本地化,如果不是正则表达式专家,很难扣除..

我的字符串包含引号和大括号等字符,这些字符因使正则表达式更难而闻名。

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

换句话说,在:

 ereg_replace (string pattern, string replacement, string subject) 

我需要string patternstring replacement表达式。

我的字符串是

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

我需要改变最后一部分:

'label' => 'someword'),

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

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

请注意,字符串someword在案例中也可以是SomeWordSOMEWORD甚至Some wordSome_Word,这意味着它可以包含空格,下划线或实际上几乎所有角色都来自...)

编辑I:忘了提及__()部分当然是wordpress textdomain for translation。例如__('string','texdomain')

编辑II:

如果我在评论中过于紧迫或要求,我很抱歉,我确实尝试理解,而不仅仅是复制粘贴一个在其他情况下对我不起作用的解决方案。 : - )

编辑III:

THIS工具的帮助下,我明白我的基本误解是在正则表达式中使用VARIABLES的可能性。 $1实际上是我需要的,以便更好地理解。

(非常简单)模式,也可用于记事本++

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

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

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

3 个答案:

答案 0 :(得分:1)

如果您一直在寻找label密钥,您应该能够做到这样的事情:

$pattern = "/array\((.*), 'label' => '(.*)'/U";
$added_string = 'anotherstring';
$replacement = 'array($1, ' . "'label' => __('" . '$2' . "','$added_string'";
$final_string = preg_replace($pattern, $replacement, $original_string);

答案 1 :(得分:1)

对于有问题的输入和输出模式:'label' => ('.*')足以匹配字符串并执行替换。此模式匹配字符串中的以下部分:' label' => ' 之间的任何字符。大括号中的部分模式将 ' 之间的任何字符分组,以后可以使用$1访问该字符。 E.g:

$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')),

答案 2 :(得分: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'=&gt; __('someword','otherword')),

DEMO