如何使用PHP检索子字符串
我试图找出如何从我无法控制的字符串中提取一些子字符串。字符串包含我需要的3条信息。它们是:如何使用PHP检索子字符串,php,Php,我试图找出如何从我无法控制的字符串中提取一些子字符串。字符串包含我需要的3条信息。它们是: Order # Middle Digits CV2 Number 这些信息中的每一条都是可变长度的。例如,在下面的字符串中,订单号是2,但很可能是20或200,或20174,或其他。中间数字可以是8个数字或2个数字,等等。CV2数字可以是3、2或1个数字 Here are the middle digits of the card number for order #2: Middle Digits:
Order #
Middle Digits
CV2 Number
这些信息中的每一条都是可变长度的。例如,在下面的字符串中,订单号是2,但很可能是20或200,或20174,或其他。中间数字可以是8个数字或2个数字,等等。CV2数字可以是3、2或1个数字
Here are the middle digits of the card number for order #2:
Middle Digits: 11111111
And here is the CV2 number:
CV2 Number: 444
在上面的示例字符串中,我需要获得订单号(2)、中间数字(11111111)和CV2号(444)。这些数字具有任意长度,或者可能根本不存在
哪些PHP函数/逻辑可以帮助我可靠地检索这些值?我需要的唯一信息是数字
谢谢大家!
The explode() function breaks a string into an array.
explode(separator,string,limit);
例如:
$str = "Hello world. It's a beautiful day.";
print_r (explode(" ",$str));
上述代码的输出将为:
Array
(
[0] => Hello
[1] => world.
[2] => It's
[3] => a
[4] => beautiful
[5] => day.
)
您需要2个想法才能使用: 1) substr()您可以阅读更多 返回由start和length参数指定的字符串部分 2) strpos()您可以阅读更多 查找haystack字符串中第一个出现的指针的数字位置 haystack-要搜索的字符串 指针-如果指针不是字符串,则将其转换为整数并作为字符的序数值应用 偏移量-如果指定,搜索将从字符串开头开始计算此数量的字符。与strrpos()和strrpos()不同,偏移量不能为负 您需要在所需值之前找到关键字,如
中的“CV2编号:444”
您需要查找的关键字是位置是CV2编号:
,以及使用substr()获得的值444
或者,您可以使用以下方法在php中使用Reg_exp:
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
在主题中搜索与模式中给定的正则表达式的匹配项
而这个例子
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>
您可能希望结合php查找文本匹配模式 PCRE正则表达式语法为匹配模式提供了强大的功能。您可以通过实现如下模式来检索这些数字:(对于顺序#NNNN),(中间数字:NNNN),(CV2编号:nnnnnn),其中NNNN将是匹配的文本 编辑 例如,要匹配订单号,请尝试以下操作:
preg_match('/order #([0-9]+)/', $str, $matches);
然后,
$matches[1]
应该包含匹配的订单号。是否有某种格式,您将以这种格式接收这些订单号?上面的4行字符串正是我接收的格式。字符串中唯一不同的部分是实际的数字本身。然后你应该能够逐行读取。然后在第二行和第四行中,将子字符串经过“:”字符加上一个“”(空格字符)并返回以下数字。我看到3个好答案……他们都得到了否决票吗???谢谢。不过我不知道数字的长度。它们是任意长度的。我也不能依赖前面的文本来设定长度,所以我也不能确定起始位置。然而,我可以依赖于遵循特定格式的数字。例如,订单号总是跟在子字符串订单#
后面,中间数字总是紧跟在子字符串中间数字之后:
所以你应该使用分解函数,只需拆分字符串并得到结果。死人,如果你问我的话,我没有投你的反对票。我比你高。有人通过投票否决了我们所有人。所以我们应该暂停做这件事的人。。。谢谢你的回答。所有这些答案都是很好的帮助。是的,有人投票否决了所有人。他们应该被吊死,有人也投票否决了我。不过我不在乎,他们可能不知道答案。谢谢你的回答。我不知道为什么有人会投你反对票。我要试试这个!
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>
Array
(
[0] => Array
(
[0] => def
[1] => 0
)
)
preg_match('/order #([0-9]+)/', $str, $matches);