কীভাবে রেজেক্স ম্যাথারগুলিকে অ-লোভী করবেন?


20

আমি কোনও ফাইলে পাঠ্য প্রতিস্থাপনের জন্য একটি রেজেক্স ব্যবহার করার চেষ্টা করছি (কেবল প্রোটোকল / ডোমেন / দিয়ে একটি সম্পূর্ণ url প্রতিস্থাপন করুন):

:%s/\(https\?:\/\/.*?\/\).*/\1/gc

দুর্ভাগ্যক্রমে .*?স্ট্রিংটির সাথে মেলে না, এমনকি কোয়ানটিফায়ার থেকে বাঁচার চেষ্টা করছেন ?? অ লোভী কোয়ান্টিফায়ার কীভাবে ভিমে পালাতে হবে?


2
:help greedyআপনাকে সঠিক সহায়তা বিষয়ের দিকে নিয়ে যেতে চাইত। :help regexpভিমের রেজেেক্স গন্ধ বর্ণনা করতে সহায়তা করা।
জামেসান

উত্তর:


27

অপারেটরদের লোভী সংস্করণগুলির জন্য ভিমের রেজেক্সের বিশেষ বাক্য গঠন রয়েছে (এটি একধরণের বিরক্তিকর, তবে আপনাকে কেবল এটি মুখস্ত করতে হবে): http://vimregex.com/#Non- লোভী

অ-লোভী সংস্করণ *হয় \{-}। সুতরাং, কেবল প্রতিস্থাপন .*সঙ্গে .\{-}:

:%s/\(https\?:\/\/.\{-}\/\).*/\1/gc

6

আমি সবসময় সমস্যাটিকে দুটি ধাপে ভাঙতে পছন্দ করি:

/\v(https?):\/\/(.{-})\/.*        <-- Search
:%s,,Protocol:\1 - Domain:\2,g    <-- Substitution

অনেক ব্যাকস্ল্যাশগুলি এড়ানোর জন্য খুব জাদু "\ v" ব্যবহার করে প্রতিস্থাপনের সর্বশেষ অনুসন্ধানটি উল্লেখ করে এবং প্রতিস্থাপনের ডিলিমিটার পরিবর্তন করে। এই সমস্ত পরিবর্তনগুলি কোডটিকে আরও পঠনযোগ্য করে তোলে।

এখানে চিত্র বর্ণনা লিখুন


2

[^\]+/.লোভ প্রতিরোধ করার জন্য আপনি এটি ব্যবহার করতে পারেন । [^/]মানে "প্রত্যাশিত যে কোনও কিছুর সাথে মেলে /, এবং +সেই এক বা একাধিকবার পুনরাবৃত্তি করে ...

:%s!\v^(https?)\://([^/]+)/.*$!Protocol:\1 \t Domain:\2!g

আমার যদি /রেজেক্সে থাকে তবে আমি !বিভাজক হিসাবে ব্যবহার করব যাতে আমাকে পালাতে হবে না /

উদাহরণ

ধরা যাক আপনার নিম্নলিখিত url রয়েছে:

http://academy.mises.org/courses/econgd/
http://academy.mises.org/moodle/course/view.php?id=172
http://acmsel.safaribooksonline.com/book/-/9781449358204?bookview=overview
http://acmsel.safaribooksonline.com/home
http://acordes.lacuerda.net/bebo__cigala/lagrimas_negras-2.shtml
http://acordes.lacuerda.net/jose_antonio_labordeta/albada.shtml
http://anarchitext.wordpress.com/category/new-middle-east/
https://courses.edx.org/courses/course-v1%3ADelftX%2BFP101x%2B3T2015/wiki/DelftX.FP101x.3T2015/resources-and-links/
https://cseweb.ucsd.edu/classes/wi11/cse230/lectures.html
https://developer.mozilla.org/en-US/docs/CSS
https://developers.google.com/edu/python
https://developers.google.com/structured-data/testing-tool/

প্রতিস্থাপন প্রয়োগ করে আপনি তা পাবেন:

Protocol:http    Domain:academy.mises.org
Protocol:http    Domain:academy.mises.org
Protocol:http    Domain:acmsel.safaribooksonline.com
Protocol:http    Domain:acmsel.safaribooksonline.com
Protocol:http    Domain:acordes.lacuerda.net
Protocol:http    Domain:acordes.lacuerda.net
Protocol:http    Domain:anarchitext.wordpress.com
Protocol:https   Domain:courses.edx.org
Protocol:https   Domain:cseweb.ucsd.edu
Protocol:https   Domain:developer.mozilla.org
Protocol:https   Domain:developers.google.com
Protocol:https   Domain:developers.google.com
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.