PHP-用于在osCommerce和OpenCart之间转换地址格式的正则表达式?
我需要将整个用osCommerce制作的电子商店导入OpenCart。到目前为止,一切顺利。我已经成功地导入了几乎所有内容,除了SEO和一些稀疏数据位,但是我的地址格式有问题 osCommerce使用$firstname$lastname$cr$streets$cr$city,$postcode$cr$statecoma$country,而OpenCart使用{company}{firstname}{lastname}{address{address}{postcode}{city}{country} 也许我错了,但看看这些字符串集之间的基本区别,我认为正则表达式是将osCommerce格式的地址格式字符串转换为OpenCart格式的地址格式字符串的合适工具PHP-用于在osCommerce和OpenCart之间转换地址格式的正则表达式?,php,regex,opencart,oscommerce,street-address,Php,Regex,Opencart,Oscommerce,Street Address,我需要将整个用osCommerce制作的电子商店导入OpenCart。到目前为止,一切顺利。我已经成功地导入了几乎所有内容,除了SEO和一些稀疏数据位,但是我的地址格式有问题 osCommerce使用$firstname$lastname$cr$streets$cr$city,$postcode$cr$statecoma$country,而OpenCart使用{company}{firstname}{lastname}{address{address}{postcode}{city}{count
然而,我在正则表达式中是完全空的。谁能告诉我哪个正则表达式最适合我的需要?或者,如果不使用正则表达式是可行的,或者它们是一个坏主意,我应该尝试使用哪种方法?我假设
cr
代表回车符或换行符,并且源字符串中有字面的美元符号$
对于重新排序,您必须捕获地址的部分,并在替换字符串中使用它们
^\$(.+?)\$(.+?)\$.\$(.+?)\$.\$(.+?)\$(.+?)\$.\$(.+?)\$(.+?)\$(.+)$
然后将其替换为
{}{$1}{$2}{$3}{}{$5}{$4}{$7}
因此,这将成为
$re = '/^\\$(.+?)\\$(.+?)\\$.\\$(.+?)\\$.\\$(.+?)\\$(.+?)\\$.\\$(.+?)\\$(.+?)\\$(.+)$/s';
$replacement = '{}{$1}{$2}{$3}{}{$5}{$4}{$7}';
$new_address = preg_replace($re, $replacement, $address);
但您也可以用于拆分
$parts = explode('$', $address);
然后通过重新排序和插入大括号将零件重新组合在一起。我假设
cr
代表回车符或换行符,并且在源字符串中有字面美元符号$
对于重新排序,您必须捕获地址的部分,并在替换字符串中使用它们
^\$(.+?)\$(.+?)\$.\$(.+?)\$.\$(.+?)\$(.+?)\$.\$(.+?)\$(.+?)\$(.+)$
然后将其替换为
{}{$1}{$2}{$3}{}{$5}{$4}{$7}
因此,这将成为
$re = '/^\\$(.+?)\\$(.+?)\\$.\\$(.+?)\\$.\\$(.+?)\\$(.+?)\\$.\\$(.+?)\\$(.+?)\\$(.+)$/s';
$replacement = '{}{$1}{$2}{$3}{}{$5}{$4}{$7}';
$new_address = preg_replace($re, $replacement, $address);
但您也可以用于拆分
$parts = explode('$', $address);
然后通过重新排序和插入大括号将这些部分重新组合在一起。OpenCart地址存储为每个数据段的单独字段。您给出的OC格式仅适用于可视数据,如发票上的地址。但是,该地址的所有数据都有自己的字段,如果您查看
地址
或顺序
表,就可以看到该字段。值得注意的是,地址也附加了ISO代码,所以在导入时需要考虑到这一点,以避免出现问题。假设osCommerce以类似的方式存储数据(我没有亲自使用),那么您只需要将旧列映射到新列。但是,如果它们存储为单个文本,并且您需要提取它,则可以使用
%^(\w+) (\w+)\s+([\w ]+)\s+([\w ]+)\s+([\w ]+)\s+([\w]+),\s*(\w+)$%
使用此作为示例地址进行测试
My Name
Street name
City name
P05T C0D3
State, Country
OpenCart地址存储为每个数据段的单独字段。您给出的OC格式仅适用于可视数据,如发票上的地址。但是,该地址的所有数据都有自己的字段,如果您查看
地址
或顺序
表,就可以看到该字段。值得注意的是,地址也附加了ISO代码,所以在导入时需要考虑到这一点,以避免出现问题。假设osCommerce以类似的方式存储数据(我没有亲自使用),那么您只需要将旧列映射到新列。但是,如果它们存储为单个文本,并且您需要提取它,则可以使用
%^(\w+) (\w+)\s+([\w ]+)\s+([\w ]+)\s+([\w ]+)\s+([\w]+),\s*(\w+)$%
使用此作为示例地址进行测试
My Name
Street name
City name
P05T C0D3
State, Country
我不确定你想在这里实现什么。它只是重新排序并将美元符号
$
替换为大括号{}
?cr
代表什么?这是回程票吗?很抱歉耽搁了:)是的,没错$在这种情况下,cr是一个回车。我需要的是将osCommerce地址格式字符串转换为OpenCart句柄的地址格式字符串。美元符号是文字美元符号还是来自变量名?我不确定您想在这里实现什么。它只是重新排序并将美元符号$
替换为大括号{}
?cr
代表什么?这是回程票吗?很抱歉耽搁了:)是的,没错$在这种情况下,cr是一个回车。我需要的是将osCommerce地址格式字符串转换为OpenCart句柄的地址格式字符串。美元符号是文字美元符号还是来自变量名?在这种情况下,地址不是ISO编码的问题,因为与客户或发票相关的osCommerce表对于任何地址字段都是空的(这是一家以本地取货方式为客户提供服务的书店,因此该书店被修改为不询问地址。老实说,它更像是一个预订系统,而不是一个真正的电子商店:P(但我被要求从表中导入所有内容,因为这是一个更符合未来的设计,因此我需要导入地址格式字符串):)@JulioMecaHansen-是的,我理解,但是OC中的任何地址都必须具有国家和地区的ISO代码。在这种情况下,地址不是ISO编码的问题,因为与客户或发票相关的osCommerce表对于任何地址字段都是空的(这是一家以本地取货方式为客户提供服务的书店,因此该书店被修改为不询问地址。老实说,它更像是一个预订系统,而不是一个真正的电子商店:P(但我被要求从表中导入所有内容,因为这是一个更符合未来的设计,因此我需要导入地址格式字符串):)@JulioMecaHansen-是的,我理解,但是OC中的任何地址都必须具有国家和地区的ISO代码