2011-03-09 18 views
21

में मैथ ऑपरेशंस को प्रतिस्थापन ऑपरेशन करते समय मुझे बैकरेफर में कोई संख्या जोड़ने की आवश्यकता है।रेगेक्स

ईजी। मैं

www.site.com/doc.asp?doc=321 & भाषा = 1

को

www.site.com/headline/100321.article

एक यूआरएल पुनर्लेखन कर रहा हूँ जैसे एक साधारण प्रतिस्थापन करना लेकिन मुझे दस्तावेज़ आईडी में 100,000 जोड़ने की आवश्यकता है। मेरे पास जो कुछ भी है, वह कुछ भी जोड़ने के बिना अब तक काम करता है।

s/.*doc=(\d+).*/www.site.com\/headline\/$1.article/g; 

लेकिन मैं 100,000 से $ 1 कैसे जोड़ सकता हूं?

ध्यान दें, आप न सिर्फ '100' नंबर से पहले क्योंकि दस्तावेज आईडी> 999

+2

मैं 'ई' ध्वज का उपयोग करके एक सरल गणित अभिव्यक्ति करने में कामयाब रहा। s /.* doc = (\ d +)। */$ 1 + 100000/ई लेकिन इस तरह यह केवल संख्या को वापस करता है न कि 'रैपिंग' यूआरएल। मुझे इसे बाकी स्ट्रिंग के साथ जोड़ना होगा। – Kevin

+0

+1 इस प्रश्न के लिए धन्यवाद। मुझे लिनक्स प्रोग्राम 'नाम बदलें' के समान कुछ करने में मदद मिली। – Geoff

उत्तर

29

पर्ल का उपयोग कर:

s/.*doc=(\d+).*/"www.site.com\/headline\/".($1+100000).".article"/e; 

आप ई ध्वज के साथ किया है के रूप में, सही हिस्सा अब एक अभिव्यक्ति हो जाता है

सबसे अच्छा तुम कर सकते हो

वर्बोज़ की तरह कुछ है। तो आपको तारों के रूप में गैर-कैप्चर भाग को लपेटना होगा।

+0

करना होगा आपको पता है कि यह .Net regex पार्सर में काम करता है या नहीं? – Kevin

+1

@ केविन, नहीं, ऐसा नहीं है। पर्ल द्वारा '($ 1 + 100000) 'भाग का मूल्यांकन किया जा रहा है, रेगेक्स के पास इसका कोई लेना-देना नहीं है। लेकिन, ऐसा लगता है कि आप पहले से ही पर्ल का उपयोग कर रहे हैं, नहीं? –

+2

नाइस पर्ल वूडू!+1 –

5

regex में संभव नहीं है यही कारण है कि हो सकता है जोड़ सकते हैं। रेगेक्स केवल पैटर्न से मेल खाता है, यह अंकगणित नहीं करता है।

match  replace 

(\d{6,}) $1 
(\d{5})  1$1 
(\d{4})  10$1 
(\d{3})  100$1 
(\d{2})  1000$1 
(\d)  10000$1 
+0

क्या रेगेक्स बनाना संभव होगा जो अंकगणित करता है? एक बेहद जटिल की तरह? मुझे पता है कि यह करने के लिए यह सबसे प्रभावी तरीका से दूर होगा, लेकिन यह अभी भी एक तकनीकी अभ्यास के रूप में मूल्य होगा। वास्तव में मुझे यह पृष्ठ कैसे मिला (संबंधित Google खोज के माध्यम से): क्योंकि अगर यह संभव था या किसी ने इसे किया तो मैं उत्सुक था। – flarn2006

+0

@ flarn2006, नहीं, जैसा कि मैंने कहा, regex केवल पैटर्न से मेल खाता है, यह अंकगणित नहीं करता है। रेगेक्स आपको केवल बताएगा "हां, पाठ आपके द्वारा प्रदान किए गए पैटर्न से मेल खाता है (या नहीं, यह नहीं था)", और कुछ नहीं। –

+0

एक रेगेक्स बनाने के बारे में क्या है जो अंकगणितीय कथन से मेल खाता है जो सही है? "45 + 6 = 51" की तरह मिलान होगा, लेकिन "38 + 16 = 4" नहीं होगा। क्या यह सिद्धांत में संभव होगा? – flarn2006

2

आप केवल कुछ लेख तुम सिर्फ जानवर बल यह

...doc=322 -> www.site.com/headline/100322.article 
...doc=323 -> www.site.com/headline/100323.article 
...doc=324 -> www.site.com/headline/100324.article 
...etc 

regex में गणित कर सकता है, तो आप इसे यहाँ पहले देखें।