-1

私はこれを理解しようとして苦労しました。

私のニーズを次のように説明しましょう。

  1. 私はphpsms送信者スクリプトを作成しています。

  2. 受信者の電話番号は、テキストエリア内にコンマで区切って入力されます(例::)2348064356853,2347065478934,2348167456845,2347123454680

  3. これらの番号は、異なるモバイルネットワークからの電話番号の混合物になります

  4. さまざまなAPIがさまざまな電話グループ(モバイルネットワーク)へのSMS配信を処理します(たとえば、API1はNetworkAとNetworkBからの電話を処理し、API2はNetworkCなどを処理します)

  5. さまざまな電話ネットワークに割り当てられている番号の形式はすでに知っています。

利用可能なすべてのネットワークの形式は次のとおりです。

  • すべての電話番号は、234から始まる13桁の長さです。
  • 各電話番号の最初の6桁は、ネットワークを識別します
  • すべてのネットワークには、複数の一意の識別番号があります

以下は、さまざまなネットワークに割り当てられた番号です。

  • ネットワークA-234706, 234803, 234806, 234810, 234813, 234816 4235940,
  • ネットワークB-234705, 234805, 234807, 234815,
  • ネットワークC-234809, 234817, 234818, 234708
  • ネットワークD-234802, 234808, 234812
  • ネットワークE-`234702、234819、234709、234704、234707

私の課題は、これらの異なるネットワークから電話番号を分離し、それらを別々の変数にグループ化する方法です。

どうか、これを手伝ってくれる人が必要です。

4

3 に答える 3

0

これがあなたの正規表現です(?P<NETA>234(?:706|803|806|810|813|816)\d{7})|(?P<NETB>234(?:705|805|807|815)\d{7})|(?P<NETC>234(?:809|817|818|708)\d{7})|(?P<NETD>234(?:802|808|812)\d{7})|(?P<NETE>234(?:702|819|709|704|707)\d{7})

次回は自分で作成するのに役立つコードをいくつか紹介します

<?php

    $networx = array(
        'A'     => array( 706, 803, 806, 810, 813, 816 ),
        'B'     => array( 705, 805, 807, 815 ),
        'C'     => array( 809, 817, 818, 708 ),
        'D'     => array( 802, 808, 812 ),
        'E'     => array( 702, 819, 709, 704, 707 )
    );


    $regex = '';

    foreach ( $networx as $k => $nums ) {
        $nums = implode( '|', $nums );
        $regex .= ( $regex ? '|' : '' ) . "(?P<NET{$k}>234(?:{$nums})\d{7})";
    }


    $text = "Network A - 2347061234567, 234803, 234806, 234810, 234813, 23481 6 4235940,

    Network B - 234705, 2348051234567, 234807, 2348151234567,

    Network C - 234809, 234817, 2348181234567, 234708

    Network D- 234802, 2348081234567, 234812

    Network E - 234702, 234819, 234709, 234704, 234707";

    preg_match_all( "/{$regex}/", $text, $matches );

?>

最後の変数には、対応する番号の配列を含む、、、...などの$matchesキーが含まれます。NETANETBNETE

[NETB] => Array
    (
        [0] => 
        [1] => 2348051234567
        [2] => 2348151234567
        [3] => 
        [4] => 
    )
于 2012-10-26T18:50:54.090 に答える
0

ネットワークA

/234(?:706|803|806|810|813|816)\d{7}/

ネットワークB

/234(?:705|805|807|815)\d{7}/

ネットワークC

/234(?:708|809|817|818)\d{7}/

ネットワークD

/234(?:802|808|812)\d{7}/

ネットワークE

/234(?:702|704|707|709|819)\d{7}/

preg_match_all上記のper式をオプションとともに使用しPREG_SET_ORDERて、すべての数値が配列にきちんと収まるようにすることができます$matches[0]

式をアンカー(^または$)するか、境界またはルックアラウンドアサーションを使用することができますが、入力が正確に何であるかはわかりませんでした。

于 2012-10-26T18:37:08.927 に答える
0

1-次のような個別のネットワークプレフィックス。

networks={
    "505 404 506 606",
    "236 848 488 993"
    etc
};

2-番号が有効かどうかを取得し、それを分離します。 /234(\d{3})(\d{7})/gmこれにより、2つのグループが作成されます。1つはプレフィックスを持ち、もう1つは番号を持ちます。そのため、プレフィックスを見つけて、見つけたネットワーク配列のインデックスに番号を送信する必要があります。あなたのプレフィックス。

編集:デモ

于 2012-10-26T18:41:23.570 に答える