Smarty/PHP Regex replace



我有下一个字符串:

countries_united_states_ohio

有时可能会countries_spain_madrid

如何删除"国家/地区"一词并具有下一个输出:
United States, Ohio

Spain, Madrid

我正在使用Smarty,我尝试了这样的事情:

{$string|replace:"_":", "|capitalize}

问题是它返回美国,国家(如预期的那样(,我想我可以使用 substr 删除"国家"一词。

有人知道吗?

谢谢!

我想我找到了一种方法。
您将需要世界上所有国家/地区的列表。示例:https://www.countries-of the-world.com/all-countries.html

代码将查看字符串的每个部分,如果为 true,则查看它是否是"国家/地区单词":
它将确保它尚未抓取该单词(请参阅所有"未输入"国家/地区(。
如果它尚未在国家/地区数组中,请将其添加到该数组中。

现在我可以把这个国家搞砸了。

州/城市是我删除国家和_剩下的.

$Ucountries = ["Uganda",
"Ukraine",
"United Arab Emirates (UAE)",
"United Kingdom (UK)",
"United States of America (USA)",
"Uruguay",
"Uzbekistan"];
$Mcountries = ["Macedonia (FYROM)",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Mauritania",
"Mauritius",
"Mexico",
"Micronesia",
"Moldova",
"Monaco",
"Mongolia",
"Montenegro",
"Morocco",
"Mozambique",
"Myanmar (Burma)"];
$str = "countries_mexico_mexico_city";
//$str = "countries_united_states_ohio";
$str = str_replace("countries_", "", $str);
// Copy array needed to $CountryList
$CountryList = ${strtoupper(substr($str,0,1)). "countries"}; 
$countryarr = array();
$arr = explode("_", $str);
Foreach($arr as $val){
Foreach($CountryList as $item){
If(stripos($item, $val) !== false){
If(!in_array($val, $countryarr)){
$countryarr[] = $val;
}
}
}
}
$country = implode(" ", $countryarr);
$state_city = preg_replace("/" . implode("_",$countryarr) . "/", "", $str,1);
$state_city = trim(str_replace("_", " ", $state_city));
Echo $country . "n" . $state_city;

https://3v4l.org/POMPT

编辑;当我刷牙时想到了一个方法。
由于国家将只有墨西哥,我只能preg_replace更换一次。
此外,我还必须将替换模式更改为 countryarr 的内爆。
现在剩下的是一个州/城市,首先带有下划线,一个或多个单词用下划线分隔。
因此,将下划线替换为空格并修剪字符串。

编辑2;现在我已经睡了一会儿,我想与国家匹配的阵列将非常大。
所以我做了一个改变。
国家/地区的每个首字母都是一个新数组,代码只会在具有相同首字母的国家/地区循环。

使用爆炸将其拆分为 _

$textString = "countries_united_states_ohio";
$split = explode("_",$textString);

$split现在将是

$split = [countries,united,states,ohio];

然后你可以随心所欲地使用它,$split[#]的位置,重新组装等。

countries_spain_madrid

echo $split[1].",".$split[2];

输出 => 西班牙、马德里

countries_united_states_ohio

echo $split[1]." ".$split[2].",".$split[3];

输出 => 美国、俄亥俄州

但这里的问题是,按照您设置它的方式,没有有效的编程方法来确定它是空格还是分隔符来拆分单词(即united_states或countries_span_madrid(。

如果你知道发生了什么,你可以这样弄清楚,但它仍然不是很有效,这意味着你基本上是静态地做它或确定特定的单词,表示它是一个单词(美国(或单个世界的一组单词

您可以尝试对空格与单词拆分使用不同的分隔符。也许 _ 用于空间和 - 用于拆分。就像说united_states俄亥俄州

如果countries_总是在开头,那么删除它就很容易了,听起来你已经知道如何做到这一点了。

但是我不认为仅使用字符串函数就可以正确拆分字符串的其余部分,在 Smarty 或一般的 PHP 中。问题是,如果下划线也用于分隔具有多个单词的术语中的单词,例如"美国",则需要在术语之间使用不同的分隔符。代码无法知道每个下划线是否表示术语分隔符或单个术语中的空格。

如果将输入字符串与可能包含的可能术语(国家/地区、州、城市等(列表进行比较,则可能能够完成此操作,但它将比字符串替换复杂得多。希望您能够修改这些字符串的存储或生成方式,以便它们使用不同的分隔符。

最新更新