2015-09-30 5 views
5

मैं नियमित अभिव्यक्ति लिखने में बहुत गरीब हूं।ब्रैकेट्स "()" के बीच मूल्य लेने के लिए नियमित अभिव्यक्ति?

मैं ब्रैकेट्स (() "के बीच मूल्य प्राप्त करने का प्रयास कर रहा हूं। नीचे की तरह कुछ ...

$a = "POLYGON((1 1,2 2,3 3,1 1))"; 
preg_match_all("/\((.*)\)/U", $a, $pat_array); 
print_r($pat_array); 

लेकिन यह मेरे जैसे तत्वों दे देंगे ...

Array 
(
    [0] => Array 
     (
      [0] => ((1 1,2 2,3 3,1 1) 
     ) 

    [1] => Array 
     (
      [0] => (1 1,2 2,3 3,1 1 
     ) 
) 

लेकिन मैं एक के रूप में लाने के लिए "1 1,2 2,3 3,1 1" चाहते हैं उत्पादन।

मुझे पता है कि हम इस आउटपुट प्राप्त करने के बाद ब्रैकेट को ट्रिम कर सकते हैं। लेकिन अगर यह नियमित अभिव्यक्ति का उपयोग करके किया जाता है तो यह बहुत अच्छा होगा।

अग्रिम धन्यवाद।


समाधान: अनुसार @anubhava जवाब:

@anubhava की नियमित अभिव्यक्ति का उपयोग करना।

उदाहरण:

$a = "POLYGON((1 1,2 2,3 3,1 1),(1 1,2 2,3 3,1 1),(1 1,2 2,3 3,1 1))"; 

और अगर यह नियमित अभिव्यक्ति आप इस तरह मिल जाएगा के प्रिंट परिणाम ... दूसरी सरणी तत्व पर

Array 
(
    [0] => Array 
     (
      [0] => ((1 1,2 2,3 3,1 1) 
      [1] => (1 1,2 2,3 3,1 1) 
      [2] => (1 1,2 2,3 3,1 1)) 
     ) 

    [1] => Array 
     (
      [0] => 1 1,2 2,3 3,1 1 
      [1] => 1 1,2 2,3 3,1 1 
      [2] => 1 1,2 2,3 3,1 1 
     ) 
) 

देखो, यह वास्तव में लगता है कि हम चाहते हैं।

एफवाईआई: मैंने इसे MySQL डेटाबेस से पॉलीगॉन के GEOMETRY डेटा लाने के लिए उपयोग किया है और फिर मैंने इसे सभी पॉलीगॉन नोड्स के सभी अक्षांश और देशांतर प्राप्त करने के लिए सरणी के साथ संसाधित किया है।

उत्तर

3

उपयोग:

preg_match_all('/\(+([^()]*)\)+/', $a, $pat_array); 
print_r($pat_array[1]); 

[^()]* किसी भी वर्ण कि ( या ) नहीं है से मेल खाएगी।

आउटपुट:

Array 
(
    [0] => 1 1,2 2,3 3,1 1 
) 
+1

संपादित करें यह काम बहुत अच्छी तरह से है जैसा मुझे उम्मीद है। मुझे आपके regualr अभिव्यक्ति का अर्थ नहीं पता लेकिन यह मेरे लिए काम किया धन्यवाद। –

+0

मैंने अपने रेगेक्स के लिए अपने उत्तर में एक संक्षिप्त स्पष्टीकरण लिखा है। अगर आपको इसके बारे में कोई विशिष्ट सवाल है तो मुझे बताएं। – anubhava

+1

ठीक है। मदद के लिए बहुत अच्छा धन्यवाद। –

1

उपयोग lookarounds

preg_match_all("/(?<=\()[^()]*(?=\))/U", $a, $pat_array); 

डेमो देखें। निषेध आधारित regex पैटर्न और से कब्जा कर लिया # 1 समूह अपने परिणाम प्राप्त

https://regex101.com/r/vV1wW6/42

+0

नहीं, यह काम नहीं कर रहा। यह मुझे आउटपुट के रूप में "(1 1,2 2,3 3,1 1" देता है। –

+0

@ मिहिरवडालिया – vks

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