Preg_match表达式在字符串中查找代码

时间:2011-05-16 18:08:16

标签: php regex preg-match

示例字符串:

$string = "Buyer must enter coupon code 10OFF100 in shopping cart.";
$string = "Get $20 Off Auto Parts Order Over $150. Use Coupon code: GAPCJ20";

我需要提取代码(10FF100GAPCJ20)。

我试图创建一个preg_match来查找“优惠券代码”和“优惠券代码:”并立即提取短语或单词。我自己没有太多运气或找到了reg表达。

请一些人发布正确的代码。

感谢您的帮助。

6 个答案:

答案 0 :(得分:1)

使用这个PHP代码:

$arr = array("Buyer must enter coupon code 10OFF100 in shopping cart.", "Get $20 Off Auto Parts Order Over $150. Use Coupon code: GAPCJ20");
foreach ($arr as $s) {
   preg_match('~coupon code\W+(\w+)~i', $s, $m);
   var_dump($m[1]);
}

输出

string(8) "10OFF100"
string(7) "GAPCJ20"

答案 1 :(得分:0)

这会将可选:与"代码"相匹配预计由alpha和数字组成。

/coupon code:? ([a-z0-9]+)/i

这样做吗?

简答:

那么如何提高效率呢?那么最好的办法就是将正则表达式与行词典相匹配,其中包含许多您想要支持的示例和格式。然后继续提炼你的正则表达式,直到你获得98%可靠的正则表达式。我说98%,因为你可能已经意识到它永远不会是完美的,因为有这么多:

  • 可能的拼写错误
  • 使用不同字符集的优惠券代码
  • 句子的变化和单词的排序,即
    • Free Coupon: Enter this code 8HFnF5
    • Code for coupon (7859NhF)
    • Coupons galore! Just put 646GH4 in your basket
    • Cupon code is 797gGh
    • Your code for free goodies is 4543G5
    • Add token "5479_G5t" to your basket for free CD!
    • ...所有这些都会因上述正则表达式而失败

答案 2 :(得分:0)

尝试以下方法: /coupon code[:]? ([\w]*)/i

答案 3 :(得分:0)

我的尝试:

<?php
if (preg_match('/coupon code:?\s+(.+)(\s+|$)/', $str, $matches)) {
  list(, $code) = $matches;
  echo $code;
}

答案 4 :(得分:0)

首次使用

Buyer must enter coupon code ([^ ]*) in shopping cart.

第二次使用

Get $20 Off Auto Parts Order Over $150. Use Coupon code: (.*)

答案 5 :(得分:0)

我在下面做。

preg_match('/[Cc]oupon code:?(\w+)/',$string,$match);