使用PHP解析字符串以删除speicifc字符
我有以下格式的字符串: ABC 318 XY2388 或 ABC 318 XY02388 我希望他们成为“ABC 318/XY 2388”。因此,如果在第二批字母之后有任何前导零,则删除它们 使用下面的代码,我成功地获得了如下输出 ABC 318/XY 2388 ABC 318/XY 02388(错误!) 有谁能建议一种方法,我可以修剪0(零)了吗 因此,如果我通过以下考试: ABC 318 XY2388 或 ABC 318 XY02388 最终输出应为 ABC 318/XY 2388使用PHP解析字符串以删除speicifc字符,php,regex,string,trim,Php,Regex,String,Trim,我有以下格式的字符串: ABC 318 XY2388 或 ABC 318 XY02388 我希望他们成为“ABC 318/XY 2388”。因此,如果在第二批字母之后有任何前导零,则删除它们 使用下面的代码,我成功地获得了如下输出 ABC 318/XY 2388 ABC 318/XY 02388(错误!) 有谁能建议一种方法,我可以修剪0(零)了吗 因此,如果我通过以下考试: ABC 318 XY2388 或 ABC 318 XY02388 最终输出应为 ABC 318/XY 2388*表示“重
*
表示“重复0次或更多次”,因此您可以选择每个匹配项。您的正则表达式甚至会匹配字符串[SPACE][SPACE]
或A[SPACE][SPACE]A
等
正则表达式/([A-Z]+)([0-9]+)([A-Z]+)0?([0-9]+)/
会工作得更好
这是一份验尸报告和一份尸检报告:
-将A-Z之间的字母重复1次或多次匹配的捕获组(这就是([A-Z]+)
的意思)+
-文本空格字符[SPACE]
-与0到9之间的数字匹配的捕获组重复1次或多次([0-9]+)
-文本空格字符[SPACE]
-与第一个相同。与A-Z匹配的捕获组重复1次或多次([A-Z]+)
-文本0?
字符重复0或1次(因此是可选的)0
-与0到9之间的数字匹配的捕获组重复1次或多次([0-9]+)
<?php
$input = "ABC 318 XY2388";
$output = preg_replace("/([A-Z]+) ([0-9]+) ([A-Z]+)0?([0-9]+)/", "$1 $2/$3 $4", $input);
var_dump($output); //string(15) "ABC 318/XY 2388"
$input = "ABC 318 XY02388";
$output = preg_replace("/([A-Z]+) ([0-9]+) ([A-Z]+)0?([0-9]+)/", "$1 $2/$3 $4", $input);
var_dump($output); //Same as above, as 0 is optional: string(15) "ABC 318/XY 2388"
?>
只需添加一个简单的建议:如果您需要在0年代中期修剪一个或多个,也许您可以:
$input = "ABC 318 XY0002388";
$output = preg_replace("/([A-Z]+) ([0-9]+) ([A-Z]+)(0*)([0-9]+)/", "$1 $2/$3 $5", $input);
var_dump($output); //should be "ABC 318/XY 2388"
请注意,我正在将“中间0”保存在$4上,但$4不是输出的一部分
我还没有测试过它,但它应该可以工作,也许如果你不在括号中加上“(0*)”,它可以在不保存0的情况下与“$1$2/$3$4”一起工作
我希望这会有所帮助。是否允许0在任何地方或起点以外的任何地方?是的,0在起点以外的任何地方都允许
$input = "ABC 318 XY0002388";
$output = preg_replace("/([A-Z]+) ([0-9]+) ([A-Z]+)(0*)([0-9]+)/", "$1 $2/$3 $5", $input);
var_dump($output); //should be "ABC 318/XY 2388"