Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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检索子字符串_Php - Fatal编程技术网

如何使用PHP检索子字符串

如何使用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:

我试图找出如何从我无法控制的字符串中提取一些子字符串。字符串包含我需要的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: 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);