2013-03-22 7 views
6

बचने के साथ अल्पविराम के और php में बराबर के चिह्न से अलग कर दिया मैं इस तरह एक स्ट्रिंग विभाजित करना चाहते हैं घंटे के लिए कोशिश कर रहा है लेकिन (preg_match_all के लिए) इस तरह बदसूरत निर्माण के साथ सफल नहीं हुआ:विभाजन स्ट्रिंग

/(.*)\s*[=]\s*((.+)\s*,\s*)*/ 

और इस (preg_split के लिए)

/\s*[=,^(\\,)^(\\=)]\s*/ 

कृपया, बताएं कि मैं क्या गलत कर रहा हूं?

उत्तर

6

आप नकारात्मक lookbehind assertions की आवश्यकता होगी:

$s = 'colors = blue, green, yellow, kinda violet\, not sure,purple\=almost magenta'; 

$res = preg_split('/(?<!\\\\)[,=]\s*/', $s); 

print_r($res); 

मूल रूप से यह एक अल्पविराम (या बराबर के चिह्न) अंतरिक्ष पात्रों में से एक वैकल्पिक अनुक्रम के बाद से मेल खाता है लेकिन केवल अगर कोई बैकस्लैश यह पूर्ववर्ती है।

+0

आपको बहुत बहुत धन्यवाद! आपने मेरा दिन बनाया :) * दावे के बारे में पढ़ता है * – Andrienko

1

बहुत ही सुंदर नहीं है, लेकिन इस preg_split

/(\s*=\s*)|(\s*,\s*)|(\s*\\=\s*)|(\s*\\,\s*)/g 

सबसे महत्वपूर्ण बात के साथ चाल करना चाहिए, वैश्विक मिलान के लिए अंत में छ भूल नहीं है।

+0

जी संशोधक पिक्चर में मौजूद नहीं है, क्या आप इसे जावास्क्रिप्ट रेगेक्स के साथ मिश्रित कर रहे थे? :) –

संबंधित मुद्दे