0

我正在将数据从一个 CMS 导入到另一个。我在一个 CMS 中有图像标注,例如:

{image id="12321" align="right" crop="square"}

或者

{image id="12321" align="left" crop="rectangle"}

从技术上讲,align 或 crop 中的值可以是多种值,本质上都是字母。我想采用这些场景中的任何一个,并将它们变成以下内容:

[image id="12321" align="VALUEHERE" crop="VALUEHERE"]

对不起,我应该早点详细说明。这是文章正文的一部分。我不能只替换第一个和最后一个字符:) 此外,有些标注本质上相似,str_replace 不起作用。我希望得到一些 preg_replace 帮助,这就是我在标题中提到正则表达式的原因。我应该从最初的问题帖子中详细说明。

4

4 回答 4

2

If all of the values are alphabetic (can't contain {) you don't even need a regex.

$finalStr = str_replace('{', '[', $initial);
$finalStr = str_replace('}', ']', $initial);
于 2012-08-02T20:39:02.497 回答
2

正则表达式解决方案是:

$out = preg_replace('/\{(.*?)\}/','[$1]',$in);

编辑 :

我会尽力向您解释这一点,但您可以阅读preg_replace 文档以获得更好的解释。

第一个参数是正则表达式,我用它告诉 PHP 捕获大括号内的任何内容(.* 表示 0 或更多克拉)。您需要使用括号 () 将要捕获的内容包装起来。

第二个参数是替换。您可以在其中使用 $ 和一个数字(就像我使用 $1 一样)来插入您在第一个参数中捕获的内容。

所以基本上我告诉它捕捉 {} 内的内容并将其放入 [] 内。

希望你明白了一些东西......解释正则表达式真的很难......

于 2012-08-02T20:41:56.580 回答
1

Given that the format is always the same:

$input = '{image id="12321" align="left" crop="rectangle"}';
$output = preg_replace('/{image id="([^"]*)" align="([^"]*)" crop="([^"]*)"}/', '[image id="$1" align="$2" crop="$2"]', $input);
于 2012-08-02T20:39:42.900 回答
1

鉴于它是字符串的第一个和最后一个字符,

$input[0] = "[";
$input[strlen($input)-1] = "]";
于 2012-08-02T20:41:08.687 回答