代码之家  ›  专栏  ›  技术社区  ›  Fadly Dzil

在preg_match检测到特定字符后从字符串中获取特定数字

  •  0
  • Fadly Dzil  · 技术社区  · 7 年前

    我想把字符串“npwp”后面的数字去掉,然后把后面的所有数字都取出来。

    有时我有一根这样的绳子:

    $valueDetail['DTL02CNA'] = NPWP:016386112436000 JALAN ELANG DESA SUKAHATI CITEUREUP BOGOR 16810, INDONESIA TEL:+62(21)8765105
    

    有时像这样:

    $valueDetail['DTL02CNA'] = NPWP 314633389431000 DELTA SILICON INDUSTRIALL PARK 3 JL PINANG F 16/25A, CICAU CIKARANG PUSAT, CITY: BEKASI, JB 17550 INDONESIA
    

    从上面的例子来看,我需要这样的结果:

    016386112436000
    314633389431000
    

    现在,我只知道如何识别它

    <?= preg_match("/npwp/i", $valueDetail['DTL02CNA'] ) ?  '<label class="label label-success">NPWP Is Exist</label>' : 'Tidak Ada NPWP' ?> <br>
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   The fourth bird    7 年前

    从字符串开头匹配 ^ ,匹配 NPWP 后跟可选冒号 :? 以及零个或多个空白字符 \s* .

    那你可以用 \K 重置报告匹配的起点并匹配一个或多个数字 \d+ :

    ^NPWP:?\s*\K\d+

    Demo

    另一个选择是在第一个捕获组中匹配捕获您的值 (\d+) :

    ^NPWP:?\s*(\d+)

    Demo

        2
  •  0
  •   Zenoo    7 年前

    你可以用正则表达式 (?<=NPWP[^\d]*)\d+

    • (?<=NPWP[^\d]*) 确保有 NPWP 比赛前除了一个数字

    • \d+ 至少匹配一次任何数字

    Demo.

        3
  •  0
  •   Rendi Wahyudi Muliawan    7 年前

    如果你的字符串npwp和数字是精确的长度,只需使用 substr()

    $number = substr($valueDetail['DTL02CNA'], 5, 15);