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

php-用大括号和引号替换字符串的正则表达式,php,regex,wordpress,notepad++,Php,Regex,Wordpress,Notepad++,我在这里看到了很多关于正则表达式的问题,但问题是它们通常(像我一样)都是非常本地化的,如果不是正则表达式专家,就很难推断 我的字符串包含引号和大括号之类的字符,它们使正则表达式变得更加困难 我想知道执行此任务所需的表达式字符串(搜索、替换) 换句话说,在: ereg_replace (string pattern, string replacement, string subject) 我需要字符串模式和字符串替换表达式 我的绳子是 array('val' => 'something

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

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

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

换句话说,在:

 ereg_replace (string pattern, string replacement, string subject) 
我需要
字符串模式
字符串替换
表达式

我的绳子是

array('val' => 'something', 'label' => 'someword'),
我需要更改最后一部分:

'label' => 'someword'),

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

请注意,字符串
someword
也可以是
someword
someword
甚至是
someword
someword
在大小写上,这意味着它可以包含空格、下划线或实际上几乎任何字符…)

编辑I:忘了声明
\uuu()
部分当然是用于翻译的wordpress textdomain函数。e、 g.
\uuu('string','texdomain')

编辑II:

很抱歉,如果我在评论中过于急迫或要求太高,我真的会尝试理解,而不仅仅是复制粘贴一个在其他情况下可能不适用于我的解决方案。。 :-)

编辑III:

通过工具的帮助,我明白了我的基本误解是在正则表达式中使用变量的可能性。
$1
实际上是我更好理解所需要的全部

这种(难以置信的简单)模式也适用于记事本++

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

Replace: 'label' => __(\1,'textdomain')
(在记事本++中,它被称为标记区域(而非var),并被标记为
\1

<?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
'label'=>''someword','otherword')


如果您一直在寻找
标签
键,您应该能够执行以下操作:

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

对于问题模式中的给定输入和输出:
'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')),

我不明白你到底想要什么,'label'=>'someword'),到'label'=>\uuuz('someword','anotherstring'))?@Akam-是的。。但是
someword
部分是一个未知字符串,而不是字面上的
someword
。它可以是任何东西。。但是,
另一个字符串
部分是一个固定字符串。@ObmerkKronen正则表达式不是很灵活。对于给定的输入和输出,在您的问题中呈现将给您期望的结果。正则表达式模式是:
'label'=>('.*')
如果您只需要用IDE快速替换,这就足够了。
'label'=>'*'
基本上就是您试图匹配的模式吗(即,您是否总是用triyng替换标签键的值)?@MikeBrant-实际上我想用__('originalvalue','anotherstring')谢谢你的回答,但我相信这只是一个简单的替换,而不是一个函数的包装。此外,它不涉及所有的麻烦制造者,比如
=
你能提供匹配单词(模式)的列表吗替换列表清晰?那么就纯正则表达式而言,搜索模式会是什么?替换内容会是什么?(很抱歉,当涉及正则表达式时,一些字符,如大括号、变量、美元符号和引号会令人困惑,因为我从不相信自己知道它们是正则表达式的一部分还是编程语言的一部分(如变量)。显示的整个
$pattern
是正则表达式。
$replacement
不是正则表达式,但是它确实对正则表达式中捕获的子模式使用了反向引用
$1
$2
。替换中的
$added\u string
部分只是一个变量,其中包含需要添加的其他字符串。如果这是常量值,您也可以很容易地在此处省略变量的使用。请注意,在标记反向引用的字符串区域周围不要使用双引号,这一点很重要(除非你想使用
\\1
语法进行反向引用。好吧,$模式中的第一个“/”只是转义,或者它是正则表达式的一部分?你真的应该花点时间阅读正则表达式的正确用法,因为它是一个非常强大的工具,可以放在你的工具箱中。任何有经验的开发人员都应该至少拥有基本的正则表达式技能。@ObmerkKronen是一个很好的工具。可以使用它。这里有一些简单的模式说明。把它们放在一起,你几乎总能得到你需要的。所有复杂的东西都由简单的部分组成。:)再次感谢-你发布的链接演示了这一点,效果很好(由阅读此答案的人转载供日后参考)@ObmerkKronen不客气。我很高兴能帮助你。@ObmerkKronen查看我的上一次编辑,实际上,我的理解中缺少的是“$1”变量。
$pattern = "/array\((.*), 'label' => '(.*)'/U";
$added_string = 'anotherstring';
$replacement = 'array($1, ' . "'label' => __('" . '$2' . "','$added_string'";
$final_string = preg_replace($pattern, $replacement, $original_string);
$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')),