2011-10-29 13 views
10

एक उदाहरण के रूप में निम्न इनपुट पर विचार करें:इस तार योजना को पार्स करने के लिए मैं रेगेक्स का उपयोग कैसे करूं?

[Ami]Song lyrics herp derp [F]song lyrics continue 
[C7/B]Song lyrics continue on another [F#mi7/D]line 

मैं ऊपर पार्स और निम्नलिखित के रूप में यह गूंज की जरूरत है:

<div class="chord">Ami</div>Song lyrics herp derp <div class="chord">F</div>song lyrics continue 
<div class="chord">C7/B</div>Song lyrics continue on another <div class="chord">F#mi7/D</div>line 

तो मूल रूप से, मैं की जरूरत है:

1) [ से <div class="chord">,

2) फिर ब्रैकेट की सामग्री संलग्न करें,

3) फिर ] से </div> बदलें।

... PHP 5.3+ का उपयोग कर।

उत्तर

10

यह काम करेगा।

$tab = "[Ami]Song lyrics herp derp [F]song lyrics continue 
[C7/B]Song lyrics continue on another [F#mi7/D]line"; 

echo str_replace(
    array('[', ']'), 
    array('<div class="chord">','</div>'), 
    $tab 
); 
+0

यह एक साफ समाधान की तरह दिखता है, आश्चर्य है कि मैंने इससे पहले क्यों नहीं सोचा था। क्या यह रेगेक्स से तेज/बेहतर है? –

+1

@RiMMER: वे दोनों रैखिक समय होना चाहिए लेकिन यह समाधान संभवतः तेज़ होगा क्योंकि कम ओवरहेड है। रेगेक्स के रूप में मज़ेदार हैं वे अभ्यास में हमेशा सही जवाब नहीं हैं :) – Cam

+0

अच्छा, यह निश्चित रूप से सबसे अच्छा समाधान जैसा दिखता है, लेकिन मैं कुछ भी स्वीकार करने से पहले दूसरों को वोट देने का इंतजार करूंगा, मुझे आशा है कि यह सबके साथ ठीक है :) –

0

कोशिश

echo preg_replace('#\\[([^]]*)\\]#','<div class="chord">$1</div>',$string); 

एचटीएमएल कोड या हालांकि अपने इनपुट स्ट्रिंग में विकृत [] रों से सावधान रहें,

0

पैटर्न

\[(.*?)\] 

के साथ बदलें

जैसा कि सभी regex उपयोग करेगा, आप खराब [] जोड़े से सावधान रहना चाहते हैं, और यदि गीत किसी भी तरह से हो सकता है [तो आप इसे ठीक से बचाना चाहते हैं।

2
$result = preg_replace('/\[(.*?)\]/', '<div class="chord">\1</div>', $subject); 

# \[(.*?)\] 
# 
# Match the character “[” literally «\[» 
# Match the regular expression below and capture its match into backreference number 1 «(.*?)» 
# Match any single character that is not a line break character «.*?» 
#  Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?» 
# Match the character “]” literally «\]» 
संबंधित मुद्दे

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