0

国コードなしで電話番号を取得するには、正規表現が必要です。これにはルックアラウンドが機能するはずですが、最終的な解決策にたどり着くことができません。科目は次のとおりです。

In-country: 0008003428573
Outside: +91 4058 825058
With dots: +91.88.4732.1354

望ましい一致は次のとおりです。

8003428573
4058 825058
88.4732.1354

次のような(?!91)マッチングを避けるために使用できることを知っています91

(?!91)[1-9][-. 0-9]{8,11}[0-9](?![0-9])

...しかし、それは1likeに一致し1 4058 825058ます。

また、Perl でのテスト中に if-then 条件を使用して完全な解決策を見つけました。

(?!91)(?(?=1)(?<!9)|)[1-9][-. 0-9]{8,11}[0-9](?![0-9])

しかし、Objective C の NSRegularExpression では機能しないことがわかりました。

同じコードで処理されるさまざまな状況に対して複数の正規表現があるため、ソリューションではグループを使用できません。コードは、正規表現でこれを解決する方法がない限り、場合によってはグループ 1 を使用できず、別の場合にはグループ 2 を使用できません。'91 が全体の試合に出てはなりません。

Obj-C の正規表現でこれを行う方法はありますか?

4

1 に答える 1

0

グループを使用したソリューションは、他のグループが非キャプチャであるため、結果を含むグループは常にグループ 1にあることに注意してください! で始まるグループ?:は非キャプチャ グループです。

(?:\b0+|\B\+91[. ]?)([1-9]\d+(?:[. ]\d+)*)\b

こちらの Regexrを参照してください。マッチの上にマウスを置くと、唯一のグループの内容を見ることができます。

于 2013-06-03T06:49:46.787 に答える