gpt4 book ai didi

PHP preg_replace - 在结果中包含模式/完整主题

转载 作者:可可西里 更新时间:2023-10-31 23:31:19 26 4
gpt4 key购买 nike

我有一个我自己无法解决的问题:替换...

locale("Sendx", "Send")
locale("System", "System")

应该变成:

locale("Sendx", "Subsub")
locale("System", "Newsys")

我尝试了一个简单的替换:

$mysearchword = "System"; #changes in a loop
$myreplaceword = "Newsys"; #also changes in the loop
$oneline = str_replace($mysearchword, $myreplaceword, $oneline);

但结果看起来像

locale("Sendx", "53ND")
locale("Newsys", "Newsys") #problem with the doubled word

当然两次都更换了系统。所以我决定使用 preg_replace

$pattern = '/locale\\(["|\']([^"\']*)["|\'], ["|\']([^"\']*)["|\']\\)/';
$replacement = '${1}, Newsys';
$subject = 'locale("System", "System")';
echo preg_replace($pattern, $replacement, $subject, -1 );

但现在几乎什么都没有了,因为只返回了括号中的单词,我不知道如何包含模式或返回替换的 $subject。$pattern 发生变化,所以我无法将“locale(...”写入 $replacement/我必须以某种方式返回替换的模式...

System, Newsys # No idea how to combine $replacement with $pattern...

你能帮我得到正确的结果吗?

最佳答案

可能只需要替换第二个变量。
每次你想替换一些东西时做一个新的 preg_replace。
此正则表达式使用分支重置来解析引号。

 # FIND: 
# $pattern =
# '/(?s)(?|(locale\s*\(\s*"[^"\\\]*(?:\\\.[^"\\\]*)*"\s*,\s*"\s*)'
# . $whatyouwanttofind .
# '(\s*"\s*\))|(locale\s*\(\s*\'[^\'\\\]*(?:\\\.[^\'\\\]*)*\'\s*,\s*\'\s*)'
# . $whatyouwanttofind .
# '(\s*\'\s*\)))/';
#
# REPLACE: ${1}$whatyouwanttoreplace${2}

(?s)
(?|
( # (1 start)
locale
\s*
\(
\s*
" [^"\\]* (?: \\ . [^"\\]* )* "
\s* , \s*
"
\s*
) # (1 end)
what you want to find
( # (2 start)
\s*
"
\s*
\)
) # (2 end)
|
( # (1 start)
locale
\s*
\(
\s*
' [^'\\]* (?: \\ . [^'\\]* )* '
\s* , \s*
'
\s*
) # (1 end)
what you want to find
( # (2 start)
\s*
'
\s*
\)
) # (2 end)
)

关于PHP preg_replace - 在结果中包含模式/完整主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21288901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com