2010-05-28 100 views
4

假设我有这样的如何替换字符串中的某些字符?

SOMETHING [1000137c] SOMETHING = John Rogers III [SOMETHING] SOMETHING ELSE 

一个字符串,我需要把它变成这个

SOMETHING [1000137c] SOMETHING = John_Rogers_III [SOMETHING] SOMETHING ELSE 

为此我需要更换空格“_”字与字之间“[1000137c]以后有事= “和”[“之前。我怎么能在PHP中做到这一点?

谢谢!

回答

3
$s = "SOMETHING [1000137c] SOMETHING = John Rogers III [SOMETHING] SOMETHING ELSE"; 
$a = split(" = ",$s,2); 
$b = split(' \[',$a[1],2); 
$s = $a[0] . ' = ' . strtr($b[0],' ','_') . ' [' . $b[1]; 

print_r($s); 

生产:

SOMETHING [1000137c] SOMETHING = John_Rogers_III [SOMETHING] SOMETHING ELSE 
+0

谢谢,我会尽力让它工作。只有在字符串中可以有多个“=”。我们唯一知道的是,这个名字是在“[1000137c] SOMETHING =”之后出现的,1000137c不再重复。 – 2010-05-28 07:47:46

+0

这将工作,如果没有“=”子字符串_before_提到一个。一切都会正常工作,如果他们之后 – 2010-05-28 07:50:22

+0

嗯......但如果之前有“=”呢? – 2010-05-28 08:24:13

0

$ ARR =在阵列中使用的正则表达式,像这样的 “=” 分割字符串,然后

str_replace(" ", "_", $arr[1]) 
+0

我喜欢你的解决方案,而不是你上面的那个:)。 – Younes 2010-05-28 07:45:33

+3

这会产生类似于: John_Rogers_III_ [SOMETHING] _SOMETHING_ELSE – 2010-05-28 07:47:42

0

“/^[\瓦特] + [[\ w \ d] +] [[\ w \ d] +] [\ w] + $/i“应该返回匹配1作为”约翰罗杰斯三世“,尽管这是基于当前的例子。

使用preg_replace_callback与上述正则表达式,您可以str_replace在回调函数中用下划线替换空格。

相关问题