Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-用于在osCommerce和OpenCart之间转换地址格式的正则表达式?_Php_Regex_Opencart_Oscommerce_Street Address - Fatal编程技术网

PHP-用于在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

我需要将整个用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格式的地址格式字符串的合适工具


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

我假设
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代码