-1

我试图弄清楚如何从我无法控制的字符串中提取一些子字符串。该字符串包含我需要的 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 函数/逻辑可以帮助我可靠地检索这些值?我需要的唯一信息是数字。

谢谢!

4

3 回答 3

1

您可能需要结合PCRE 正则表达式语法查看 php 的preg_match()以匹配文本模式。

PCRE 正则表达式语法为您提供了匹配模式的强大功能。您可以通过实现以下模式来检索这些数字:(对于订单#NNNN)、(中间数字:NNNN)、(CV2 编号:NNNN)其中 NNNN 将是匹配的文本。

编辑

例如,要匹配订单号,请尝试以下操作:

preg_match('/order #([0-9]+)/', $str, $matches);

然后$matches[1]应该包含匹配的订单号。

于 2013-03-10T06:41:06.103 回答
0
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.
)
于 2013-03-10T06:32:56.727 回答
-1

您需要 2 次思考才能使用:

1)substr() 你可以在这里阅读更多!

 string substr ( string $string , int $start [, int $length ] )

返回由 start 和 length 参数指定的字符串部分。

2)strpos() 你可以在这里阅读更多!

 int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

在 haystack 字符串中查找第一次出现 needle 的数字位置。

haystack - 要搜索的字符串。

needle - 如果 needle 不是字符串,则将其转换为整数并用作字符的序数值。

offset - 如果指定,搜索将从字符串开头开始计数的字符数。与 strrpos() 和 strripos() 不同,偏移量不能为负数。

您需要在您需要的值之前找到关键字,例如"CV2 Number: 444"您需要查看的键是位置是CV2 Number:和使用 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);
?>

会产生

Array
(
    [0] => Array
        (
            [0] => def
            [1] => 0
        )

)
于 2013-03-10T06:39:41.733 回答