আমি কীভাবে আমার ম্যাচটি বিনা লোভে করতে পারি?


479

আমার কাছে একটি বড় এইচটিএমএল ফাইল রয়েছে যা দেখতে প্রচুর পরিমাণে মার্কআপ রয়েছে:

<p class="MsoNormal" style="margin: 0in 0in 0pt;">
  <span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>

আমি একটি তেজ করার চেষ্টা করছি সার্চ-এবং-প্রতিস্থাপন সব পরিত্রাণ পেতে class=""এবং style=""কিন্তু আমি কষ্ট ম্যাচ ungreedy উপার্জন হচ্ছে।

আমার প্রথম চেষ্টা ছিল এটি

%s/style=".*?"//g

তবে ভিম পছন্দ করে না বলে মনে হচ্ছে ?। দুর্ভাগ্যক্রমে ?এই ম্যাচগুলি মুছে ফেলা ম্যাচটিকে খুব লোভী করে তোলে।

আমি কীভাবে আমার ম্যাচটিকে অসম্পূর্ণ করতে পারি?


আমি মনে করি পলের উত্তর ভাল। শুধু তাই বলব "?"
ভিমে optionচ্ছিক

14
@ এলবি, অনেক ভাষায়,? *? মানে যে কোনও চরিত্রের সাথে মেলে তবে লোভী হোন। এটাই তিনি অর্জন করার চেষ্টা করছেন।
র‌্যান্ডি মরিস

উত্তর:


734

পরিবর্তে .*ব্যবহার .\{-}

%s/style=".\{-}"//g

এছাড়াও, দেখুন :help non-greedy


37
খুব স্বজ্ঞাত নয়, এটি কি এমন কিছু যা কেবল ভিম করে?
এহতেশ চৌধুরি

94
সবকিছুর নিজস্ব নিয়মিত প্রকাশের ভাষা থাকে ... এটি রেজেক্সের বৃহত্তম সমস্যাগুলির মধ্যে একটি।
প্যাট্রিক ফারেল

35
এই সরঞ্জামগুলির মধ্যে অনেকগুলি একই সময়ে পরিপক্ক হয় এবং একটি নিয়মিত প্রকাশের ভাষার নিজস্ব উপভাষা স্বতন্ত্রভাবে বিকাশ করে। এই সরঞ্জামগুলির মধ্যে অনেকগুলিও বিভিন্ন সমস্যা সমাধানের চেষ্টা করেছিল যাতে এটি বোঝা যায় যে বাক্য গঠনটি সম্ভাব্য বন্যভাবে হতে পারে - এই বাস্তবায়নগুলি জুড়ে আলাদা। আমাদের মেনে নিতে হবে যে সত্যিকারের পৃথিবী ঠিক এভাবেই কাজ করে যদিও এটি কখনও কখনও আমাদের জীবনকে বিকাশকারী হিসাবে আরও শক্ত করে তোলে। ভাগ্যক্রমে অনেক সরঞ্জাম এই দিনগুলিতে কমপক্ষে পার্স-সামঞ্জস্যপূর্ণ বাস্তবায়ন সরবরাহ করে। দুর্ভাগ্যক্রমে ভিম তাদের মধ্যে একটিও নয়।
র্যান্ডি মরিস

15
যদি আমার মতো কেউ তাদের অনুসন্ধানকে ডিফল্ট করে \v(খুব যাদু পতাকা) আপনি ব্যবহার করতে চাইবেন .{-}
jgillman

48
@ শুরান @ জিগি মেমোনমিক: ডেট (ব্রেসেস {1,3}) এর মতো পুনরাবৃত্তির সংখ্যা নিয়ন্ত্রণ করে । বিয়োগ চিহ্নের -অর্থ: যত তাড়াতাড়ি সম্ভব পুনরাবৃত্তি করুন (সামান্য == বিয়োগ);)
সিরো সান্তিলি 21 冠状 病 六四 事件 法轮功

58

ভিমে অ লোভী অনুসন্ধান {-} অপারেটর ব্যবহার করে করা হয়। এটার মত:

%s/style=".\{-}"//g

ঠিক করার চেষ্টা করুন:

:help non-greedy


17

আপনি যদি আরও আরামদায়ক হন তবে পিসিআরই রেজেক্স সিনট্যাক্স, যা

  1. অ লোভী অপারেটরকে সমর্থন করে?, যেমন আপনি ওপি-তে জিজ্ঞাসা করেছিলেন; এবং
  2. ব্যাকওয়াচিং গ্রুপিং এবং কার্ডিনালিটি অপারেটরগুলির প্রয়োজন নেই (একেবারে বিপরীত উইম সিনট্যাক্সের প্রয়োজনীয়তা যেহেতু আপনি আক্ষরিক চরিত্রের সাথে মেলে না তবে অপারেটরগুলি নির্দিষ্ট করছেন); এবং
  3. আপনার [g] ভিএম পার্ল বৈশিষ্ট্য সহ পরীক্ষামূলকভাবে পরীক্ষিত হয়েছে

    : ver এবং বৈশিষ্ট্যগুলি পরিদর্শন; যদি + পার্ল থাকে তবে আপনি যেতে ভাল)

ব্যবহার করে অনুসন্ধান / প্রতিস্থাপন চেষ্টা করুন

:perldo s///

উদাহরণ। Img ট্যাগে src এবং Alt বৈশিষ্ট্যগুলি অদলবদল করুন:

<p class="logo"><a href="/"><img src="/caminoglobal_en/includes/themes/camino/images/header_logo.png" alt=""></a></p>

:perldo s/(src=".*?")\s+(alt=".*?")/$2 $1/

<p class="logo"><a href="/"><img alt="" src="/caminoglobal_en/includes/themes/camino/images/header_logo.png"></a></p>

1
perldoদুর্দান্ত কাজ করে, তবে দুর্ভাগ্যক্রমে রেজেক্স টাইপ করার সময় নির্বাচিত পরীক্ষাটি হাইলাইট করে না।
mljrg

12

আমি খুঁজে পেয়েছি যে এই ধরণের প্রশ্নের ভাল সমাধান হ'ল:

:%! সেড ...

(অথবা আপনি যদি পছন্দ করেন তবে পার্ল)। আইএমডাব্লু, ভিমের রেজেক্সের বিশেষত্বগুলি শিখার চেয়ে আপনি ইতিমধ্যে জানেন এমন একটি সরঞ্জাম ব্যবহার করুন। পার্ল ব্যবহার করে? ম্যাচটিকে অসম্পূর্ণ করার জন্য মোডিফায়ার কাজ।


2
ভাল কথা, তবে /patternএটি প্রয়োগ করার আগে আপনি প্যাটার্নটি সঠিকভাবে cমেলেছেন এবং আপনার ভিআইএম নিয়মিত এক্সপ্রেশনটিতে মডিফায়ার ব্যবহার করা খুব ভাল তা পরীক্ষা করতে সক্ষম হচ্ছেন :)
জোও পোর্তেলা

এটা সঠিক। এখানে সমস্ত সমাধান অ লোভীর কাছাকাছি নয়! আপনার যদি [0-9] \ {7 match সাথে অনেকগুলি পাঠ্য এবং সেই ধরণের বেশ কয়েকটি উপস্থিতিগুলির সাথে একটি লাইনে মেলতে হয় তবে এখানে কোনও সমাধান করবে না। এখানে সমাধানগুলি কেবল সাধারণ জিনিসগুলির জন্য কাজ করে (যা ন্যায্য হবে, যা বলা হয়েছিল)। তবে আপনি যদি পরবর্তী উদ্ধৃতি পর্যন্ত অনুসন্ধানের চেয়ে আরও কিছু করছেন, ভিম সাহায্য করবে না।
gcb

4

সহ \v(বেশ কয়েকটি মন্তব্যে প্রস্তাবিত হিসাবে)

:%s/\v(style|class)\=".{-}"//g

2

প্লাগিন eregex.vim পার্ল স্টাইলের অ-লোভী অপারেটরগুলি *?এবং পরিচালনা করে+?


@xsilenT github.com/othree/eregex.vim : "Vundle বা প্যাথোজেন ব্যবহার করে স্ক্রিপ্টটি ইনস্টল করার পরামর্শ দেওয়া হচ্ছে।"
এক্সেস

দুঃখিত এর জন্য আমি ভান্ডেল বা প্যাথোজেন কীভাবে ব্যবহার করব তা জানি না।
xsilen টি

-4

গ দিন,

ভিমের রিজেক্সেপ প্রসেসিং খুব উজ্জ্বল নয়। আমি খুঁজে পেয়েছি যে সেডের জন্য রেজিপ্লেক্স সিনট্যাক্সটি ভিমের দক্ষতার জন্য সঠিক মিলের বিষয়ে।

আমি সাধারণত অনুসন্ধান হাইলাইটিং সেট করে (: hlsearch সেট করে) এবং তারপরে অনুসন্ধান মোডে প্রবেশের জন্য স্ল্যাশ প্রবেশের পরে regexp দিয়ে খেলি।

সম্পাদনা: মার্ক, লোভী মিলটি হ্রাস করার কৌশলটি ডেল ডগের্তির দুর্দান্ত বই "সেড অ্যান্ড অ্যাওক" ( স্যানিটাইজড অ্যামাজন লিঙ্ক ) এও আচ্ছাদিত ।

তৃতীয় অধ্যায় "নিয়মিত এক্সপ্রেশন সিনট্যাক্স বোঝা" সেড এবং অ্যাজকের সাথে জড়িত আরও আদিম রেজি এক্সপ্যাক্স ক্ষমতাগুলির জন্য একটি দুর্দান্ত পরিচয়। শুধুমাত্র একটি সংক্ষিপ্ত পঠিত এবং উচ্চ প্রস্তাবিত।

আছে HTH

চিয়ার্স,


7
ভিমের রেইগেক্স প্রসেসিং আসলে বেশ সুন্দর। এটি এমন জিনিসগুলি করতে পারে যা লাইন / কলাম সংখ্যার সাথে মিল বা কী-ওয়ার্ড বা শনাক্তকারী বা গোপনীয় স্থান হিসাবে অক্ষরগুলির প্রতি ভাষার শ্রেণিবদ্ধকরণের ভিত্তিতে ম্যাচ পছন্দ করে। এটিতে শূন্য-প্রস্থের প্রতিস্থাপন এবং প্রতিস্থাপনের ডানদিকে এক্সপ্রেশন রাখার ক্ষমতা রয়েছে। আপনি যদি \vএটি ব্যবহার করেন তবে সিনট্যাক্সটি অনেকটা পরিষ্কার করতে সহায়তা করে।
ব্রায়ান কার্পার

1
@ ব্রায়ান, চিয়ার্স আমি একটি সহায়তা রেইগেক্স করব এবং আমি কী নিখোঁজ করছি তা দেখতে পাব।
রব ওয়েলস

@ রবওয়েলস, সেড অ্যান্ড আউক , যা সত্যিই খুব ভাল বই ইমো, লোভী / অলস কোয়ান্টিফায়ারগুলিতে স্পষ্টভাবে কোনও শব্দ ব্যয় করে না। প্রমাণ হিসাবে, বইটিতে লোভ বা লোভী শব্দের একেবারেই কোনও ঘটনা ঘটেনি , এবং অলস শব্দের কেবলমাত্র একটি, তবে সম্পর্কিত নয়, ঘটনা আছে ।
এনরিকো মারিয়া ডি অ্যাঞ্জেলিস

@ এনারিকোমারিয়াডে অ্যাঞ্জেলিস এটি তবে উদাহরণটি স্পষ্টভাবে শব্দটির উল্লেখ করে না। লোভী মিলগুলি অর্জন করতে "না" অপারেটরটি ব্যবহার করার জন্য কীভাবে আপনার রেজেক্সটি টেলিং করবেন about লোভী এবং অলস শব্দটি পার্লের এনএফএ ইঞ্জিনের সাথে উপস্থিত হয়েছিল যখন তারা লোভী ম্যাচের আচরণগুলি নির্দিষ্টভাবে সংশোধন করার জন্য অপারেটরদের পরিচয় করিয়ে দেয়।
রব ওয়েলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.