将多个字符串中的缩写转换为完整单词 - PHP
Converting an abbreviation found in multiple strings to the full word - PHP
我正在尝试操作 PHP 中的多个字符串。我正在使用 foreach
循环和 if statements
提取数组数据。一些数组数据存储为缩写。我想将这些缩写转换为完整的单词。一个例子是缩写 pwr
,代表 power
。该缩写可以在各种不同的上下文中找到。下面我将附上我的 PHP 代码及其各自的输出,您可以在其中看到 pwr
缩写所在的各种字符串。
PHP:
<?php
foreach ($finaltitle as $titlenumber => $titlename){
foreach ($techData as $tsnumber => $tsname){
if ($tsnumber == $titlenumber){
if(empty($tsname) or $tsname === '- TBD -') continue;
$finaltsdata = "<b>".$titlename." (".$tsnumber.") "."</b>: ".strtolower($tsname)."<br>";
echo $finaltsdata;
}
}
}
?>
输出:
Suspension Type - Front (105) : 4-link,
Suspension Type - Rear (106) : trapezoidal link,
Suspension Type - Front (Cont.) (107) : pwr-adjustable sport
Suspension Type - Rear (Cont.) (108) : pwr-adjustable sport
Front Tire Size (140) : p235/40yr18
Rear Tire Size (141) : p235/40yr18
Spare Tire Size (142) : p235/40yr18
Front Wheel Size (156) : 18 x 8.0
Rear Wheel Size (157) : 18 x 8.0
Spare Wheel Size (158) : 18 x 8.0
Front Wheel Material (165) : alloy
Rear Wheel Material (166) : alloy
Spare Wheel Material (167) : alloy
Steering Type (176) : pwr rack & pinion
Steering Ratio (:1), Overall (178) : 16.3
Turning Diameter - Curb to Curb (184) : 37.7
Brake Type (186) : pwr
请注意如何在各种不同的上下文中找到缩写 pwr
:单独、在一组单词之前、在破折号之前等。如何在我的 [=14= 中创建一个语句] 将所有提到的 pwr
转换为 power
?
的代码
谢谢!
$array = [
'/\b(pwr|Pwr|powr)\b/i' => 'power',
];
$tsname = preg_replace(array_keys($array), $array);
foreach ($finaltitle as $titlenumber => $titlename){
foreach ($techData as $tsnumber => $tsname){
if ($tsnumber == $titlenumber){
if(empty($tsname) or $tsname === '- TBD -') continue;
$finaltsdata = "<b>".$titlename." (".$tsnumber.") "."</b>: ".$tsname."<br>";
echo $finaltsdata;
}
}
}
正如我在评论中所说
$array = [
'/\bpwr\b/i' => 'power',
'/\bbrk\b/i' => 'brake'
];
$str = preg_replace(array_keys($array), $array, $str);
然后您只需添加更多单词及其替换即可。 Preg Replace 更好,因为您可以使用 \b
或单词边界,它可以防止在 pwrstr
中匹配 pwr
之类的事情。 \b
匹配 \W
或不匹配 \w
或英文(lol)任何不是 a-z
A-Z
0-9
和 _
的东西。
字符串替换可以匹配单词的一部分,您真的不想冒险。
preg_replace 的另一个优点是 \b(pwr|powr)\b
,您可以在其中匹配这两个并用相同的东西替换它们。 ()
是一个捕获组,在这里我只是用它来对单词进行分组,这样 \b
就不必重复了。 |
是 OR.
最后一件事是您可以使用 i
标志(在结束定界符 /foo/i
之后)使其不区分大小写。使用 str_ireplace()
,您可以执行相同的操作,但您不能像使用 preg_replace()
那样在每个匹配项的基础上进行区分。
两者都使用数组,因此您不必自己使用 str_repace()
或 preg_replace()
.
循环多次替换
如果您需要帮助,或者只是为了测试正则表达式,此站点是 https://regex101.com/ (IMO). That said, there are some slight difference (probably nothing you'll notice), but another good site is this one http://preg_replace.onlinephpfunctions.com/ 附近最好的正则表达式测试站点之一。如果你看一下上面的导航,它有一堆 PHP 沙盒内容。
干杯!
我正在尝试操作 PHP 中的多个字符串。我正在使用 foreach
循环和 if statements
提取数组数据。一些数组数据存储为缩写。我想将这些缩写转换为完整的单词。一个例子是缩写 pwr
,代表 power
。该缩写可以在各种不同的上下文中找到。下面我将附上我的 PHP 代码及其各自的输出,您可以在其中看到 pwr
缩写所在的各种字符串。
PHP:
<?php
foreach ($finaltitle as $titlenumber => $titlename){
foreach ($techData as $tsnumber => $tsname){
if ($tsnumber == $titlenumber){
if(empty($tsname) or $tsname === '- TBD -') continue;
$finaltsdata = "<b>".$titlename." (".$tsnumber.") "."</b>: ".strtolower($tsname)."<br>";
echo $finaltsdata;
}
}
}
?>
输出:
Suspension Type - Front (105) : 4-link,
Suspension Type - Rear (106) : trapezoidal link,
Suspension Type - Front (Cont.) (107) : pwr-adjustable sport
Suspension Type - Rear (Cont.) (108) : pwr-adjustable sport
Front Tire Size (140) : p235/40yr18
Rear Tire Size (141) : p235/40yr18
Spare Tire Size (142) : p235/40yr18
Front Wheel Size (156) : 18 x 8.0
Rear Wheel Size (157) : 18 x 8.0
Spare Wheel Size (158) : 18 x 8.0
Front Wheel Material (165) : alloy
Rear Wheel Material (166) : alloy
Spare Wheel Material (167) : alloy
Steering Type (176) : pwr rack & pinion
Steering Ratio (:1), Overall (178) : 16.3
Turning Diameter - Curb to Curb (184) : 37.7
Brake Type (186) : pwr
请注意如何在各种不同的上下文中找到缩写 pwr
:单独、在一组单词之前、在破折号之前等。如何在我的 [=14= 中创建一个语句] 将所有提到的 pwr
转换为 power
?
谢谢!
$array = [
'/\b(pwr|Pwr|powr)\b/i' => 'power',
];
$tsname = preg_replace(array_keys($array), $array);
foreach ($finaltitle as $titlenumber => $titlename){
foreach ($techData as $tsnumber => $tsname){
if ($tsnumber == $titlenumber){
if(empty($tsname) or $tsname === '- TBD -') continue;
$finaltsdata = "<b>".$titlename." (".$tsnumber.") "."</b>: ".$tsname."<br>";
echo $finaltsdata;
}
}
}
正如我在评论中所说
$array = [
'/\bpwr\b/i' => 'power',
'/\bbrk\b/i' => 'brake'
];
$str = preg_replace(array_keys($array), $array, $str);
然后您只需添加更多单词及其替换即可。 Preg Replace 更好,因为您可以使用 \b
或单词边界,它可以防止在 pwrstr
中匹配 pwr
之类的事情。 \b
匹配 \W
或不匹配 \w
或英文(lol)任何不是 a-z
A-Z
0-9
和 _
的东西。
字符串替换可以匹配单词的一部分,您真的不想冒险。
preg_replace 的另一个优点是 \b(pwr|powr)\b
,您可以在其中匹配这两个并用相同的东西替换它们。 ()
是一个捕获组,在这里我只是用它来对单词进行分组,这样 \b
就不必重复了。 |
是 OR.
最后一件事是您可以使用 i
标志(在结束定界符 /foo/i
之后)使其不区分大小写。使用 str_ireplace()
,您可以执行相同的操作,但您不能像使用 preg_replace()
那样在每个匹配项的基础上进行区分。
两者都使用数组,因此您不必自己使用 str_repace()
或 preg_replace()
.
如果您需要帮助,或者只是为了测试正则表达式,此站点是 https://regex101.com/ (IMO). That said, there are some slight difference (probably nothing you'll notice), but another good site is this one http://preg_replace.onlinephpfunctions.com/ 附近最好的正则表达式测试站点之一。如果你看一下上面的导航,它有一堆 PHP 沙盒内容。
干杯!