PHP Regex गायब कब्जा समूह - PHP, regex

मैं कई निर्देशांकों को पार्स करने की कोशिश कर रहा हूं, लेकिन PHP preg_match में एक कैप्चर समूह गुम है। यह परीक्षण किए गए प्रत्येक रेगेक्स सिम्युलेटर में काम करता है, लेकिन मेरे कोड में नहीं। समूह 4 हमेशा खाली आता है;

$coordinates = "N40.765775°  E8.303369°";
// -40.765775°  -8.303369°
//  40.765775°  8.303369°
// -40.765775°  8.303369°
// N40.765775°  E8.303369°
// S40.765775°  E8.303369°
// N40.765775°  W8.303369°
// S40.765775°  W8.303369°

$regex = "/([-NnSs]?)D*([0-9]?[0-9]).(d{1,10}+)Dh*([-EeWw]?)D*([0-1]?[0-9]?[0-9]).(d{1,10}+)/";
if (preg_match($regex, $coordinates, $matches)) {
print_r($matches);
} else {
echo "no matches";
}

उत्तर:

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

चूंकि आप स्ट्रिंग्स को पार्स कर रहे हैं जिनमें मल्टीबाइट वर्ण (डिग्री) हैं, तो आपको यूनिकोड जोड़ना चाहिए संशोधक, अर्थात। u रेगेक्स के अंत में।

/      /u

एक उदाहरण के रूप में: उस संशोधक के बिना, यदि आप एक जोड़ देंगे . बाद D, यहाँ:

D.h*([-EeWw]?)

... तो आप चौथे कैप्चर समूह में "ई" पर कब्जा करेंगे। इसलिए D. वास्तव में multibyte चरित्र से मेल खाता है °.