我在这里看到很多关于正则表达式的问题,但问题是它们通常(像我的)非常本地化,如果不是正则表达式专家,很难扣除..
我的字符串包含引号和大括号等字符,这些字符因使正则表达式更难而闻名。
我想知道我需要的表达式字符串(搜索,替换)来执行此任务。
换句话说,在:
ereg_replace (string pattern, string replacement, string subject)
我需要string pattern
和string replacement
表达式。
我的字符串是
array('val' => 'something', 'label' => 'someword'),
我需要改变最后一部分:
'label' => 'someword'),
到
'label' => __('someword','anotherstring')),
我将使用php,但我也想用Notepad ++测试它(以及在其他情况下使用)。 (我不知道它是否真的改变了搜索和替换字符串的内容。)
请注意,字符串someword
在案例中也可以是SomeWord
或SOMEWORD
甚至Some word
或Some_Word
,这意味着它可以包含空格,下划线或实际上几乎所有角色都来自...)
编辑I:忘了提及__()
部分当然是wordpress textdomain for translation。例如__('string','texdomain')
编辑II:
如果我在评论中过于紧迫或要求,我很抱歉,我确实尝试理解,而不仅仅是复制粘贴一个在其他情况下对我不起作用的解决方案。 : - )
编辑III:
在THIS工具的帮助下,我明白我的基本误解是在正则表达式中使用VARIABLES的可能性。
$1
实际上是我需要的,以便更好地理解。
(非常简单)模式,也可用于记事本++
Pattern: 'label' => ('.*')
Replace: 'label' => __(\1,'textdomain')
(在记事本++中,它被称为标记区域(不是var),它被标记为\1
答案 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')),