0

我需要将使用 osCommerce 制作的整个电子商店导入 OpenCart。到目前为止,一切都很好。我已经成功导入了几乎所有内容,除了 SEO 和一些稀疏数据位,但地址格式有问题。

osCommerce 使用$firstname $lastname$cr$streets$cr$city, $postcode$cr$statecomma$country而 OpenCart 使用{company} {firstname} {lastname} {address_1} {address_2} {postcode} {city} {country} .

也许我错了,但是看看这些字符串集之间的基本区别,我认为正则表达式将是将 osCommerce 格式的地址格式字符串转换为 OpenCart 格式的地址格式字符串的合适工具。

但是,我在正则表达式中完全是空的。谁能告诉我哪个正则表达式最适合我的需求?或者,如果没有正则表达式是可行的,或者它们不是一个好主意,我应该用它们尝试哪种方法?

4

2 回答 2

2

我假设cr代表回车符或换行符,并且$源字符串中有文字美元符号。

对于重新排序,您必须捕获地址的部分并在替换字符串中使用它们

^\$(.+?)\$(.+?)\$.\$(.+?)\$.\$(.+?)\$(.+?)\$.\$(.+?)\$(.+?)\$(.+)$

然后将其替换为

{}{$1}{$2}{$3}{}{$5}{$4}{$7}

所以这将成为

$re = '/^\\$(.+?)\\$(.+?)\\$.\\$(.+?)\\$.\\$(.+?)\\$(.+?)\\$.\\$(.+?)\\$(.+?)\\$(.+)$/s';
$replacement = '{}{$1}{$2}{$3}{}{$5}{$4}{$7}';
$new_address = preg_replace($re, $replacement, $address);

但您也可以explode用于拆分

$parts = explode('$', $address);

然后通过重新排序和插入大括号将零件重新组合在一起。

于 2013-03-14T11:27:01.350 回答
1

OpenCart 地址存储为每个数据的单独字段。您提供的 OC 格式仅用于可视数据,例如发票上的地址。但是,该地址的所有数据都有其自己的字段,如果您查看您的addressorder表格,您可以看到该字段。值得注意的是,地址也附有 ISO 代码,因此您需要在导入时考虑到这一点以避免出现问题。假设 osCommerce 以类似的方式存储数据(我没有亲自使用过),那么您只需将旧列映射到新列。但是,如果它们存储为单个文本并且您需要提取它,则可以使用它

%^(\w+) (\w+)\s+([\w ]+)\s+([\w ]+)\s+([\w ]+)\s+([\w]+),\s*(\w+)$%

使用此作为示例地址进行测试

My Name
Street name
City name
P05T C0D3
State, Country
于 2013-03-14T12:04:55.950 回答