/ / Regex मैच में अंकों को प्रतिबंधित करना - java, android, regex, regex-negation, regex-lookarounds

रेगेक्स मैच में अंकों को प्रतिबंधित करना - जावा, एंड्रॉइड, रेगेक्स, रेगेक्स-नेगेशन, रेगेक्स-लुकराउंड

tl; डॉ: मैं रेगेक्स में किसी विशेष टोकन पर एक गणना बाधा कैसे निर्धारित कर सकता हूं।

(regex-exp){constraint:max 10 only digits}

मैं एक टेक्स्ट ब्लॉक में एक फोन नंबर खोजने की कोशिश कर रहा हूं। Android प्लेटफ़ॉर्म Patterns वर्ग उचित कवरेज देता है। लेकिन प्राथमिक मुद्दा यह है

  • इसकी लंबाई लंबाई नहीं है
  • इसकी अधिकतम लंबाई नहीं है

तो यह वास्तव में भी मेल खाता है 1234 और भी जब वहाँ एक स्ट्रिंग की तरह है my phone numbers are +19447223311 872881122, यह एक ही संख्या के रूप में दोनों संख्याओं से मेल खाता है। यदि हम एक बाधा जोड़ सकते हैं कि पैटर्न में {7,12} अंक होने चाहिए, तो यह मेरे अनुमान के अनुसार हल होगा जितना मैंने कोशिश की "यह काम नहीं कर सका। यहाँ पैटर्न के लिए रेगेक्स है।

public static final Pattern PHONE
= Pattern.compile(                      // sdd = space, dot, or dash

"(\+[0-9]+[\- \.]*)?"        // +<digits><sdd>*

+ "(\([0-9]+\)[\- \.]*)?"   // (<digits>)<sdd>*

+ "([0-9][0-9\- \.]+[0-9])"); // <digit><digit|sdd>+<digit>

उत्तर:

जवाब के लिए 0 № 1

जैसी कोई बात नहीं है रेगेक्स बाधा Android में और के रूप में PHONE पैटर्न पूर्व-संकलित है, आप इसे या तो नहीं बढ़ा सकते।

मैं इसे इस तरह करूँगा:

Pattern constraint = Pattern.compile("\+?\d{7,12}");
Matcher constraint_matcher = constraint.matcher("I will be home by 12:30 and if you have anything " +
"urgent call me at 901 101 0101, and my extension is 1021 +19447223311  872881122    ");

while (constraint_matcher.find()) {

Matcher phone_number_matcher = Patterns.PHONE.matcher(constraint_matcher.group(0));

if (phone_number_matcher.find()) {
Log.d("MATCH", phone_number_matcher.group(0));
}
}

जो यह परिणाम देता है:

09-15 16:20:34.277 10119-10119/com.example D/MATCH: +19447223311
09-15 16:20:34.277 10119-10119/com.example D/MATCH: 872881122