নেতিবাচক চেহারা পিছনে / এগিয়ে লিনাক্স কম পেজার (বা ভিএম)


14

আমি লগ ব্যবহার করে less। Php অনুসরণ না করে "সূচক" এর সমস্ত দৃষ্টান্ত খুঁজতে চাই । /index(?!\.php)কাজ করে না. এটা কি সম্ভব? কম এবং ভিআইএম (কী তারা পৃথক হয়?) এর জন্য রেজেক্স কী? এই অ্যাপ্লিকেশনগুলির সম্পর্কিত রেগেক্স লাইব্রেরিগুলি দিয়ে কি এটি সম্ভব নয়?


উত্তর:


22

ইন vim, আপনি এটি করতে পারেন:

/index\(\.php\)\@!

কমান্ড মোডে আরও তথ্যের জন্য চেষ্টা করুন :h \@:

\@!     Matches with zero width if the preceding atom does NOT match at the
        current position. /zero-width {not in Vi}
        Like '(?!pattern)" in Perl.
        Example                 matches
        foo\(bar\)\@!           any "foo" not followed by "bar"
        a.\{-}p\@!              "a", "ap", "aap", "app", etc. not immediately
                                followed by a "p"
        if \(\(then\)\@!.\)*$   "if " not followed by "then"

সুন্দর! কম জন্য কোন ধারণা? এটি কম কাজ করে না। আমি আশা করি রেজেক্সের আচরণ সর্বত্র পিসিআরই হয়েছিল, তবে হায় হায় তাই নয়।
গ্রেগ লেভেনথাল

7
নেতিবাচক চেহারার জন্য সিনট্যাক্সটিও নোট করুন :\@<!
ল্যানোএক্সএক্স

এটা বলছে যে আপনাকে নেতিবাচক বর্ণন রাখতে হবে সঙ্গে যায় পিছনে প্যাটার্ন আগে। একটি উদাহরণ: \(some\)\@<!thingমিলবে thingএবং everythingএবং nothing, কিন্তু না something
ডোয়ান্ডারসন 21

7

(?!\.php)হ'ল পার্ল রিজেক্স এক্স অপারেটর। lessসাধারণত সিস্টেমের POSIX regexp API ব্যবহার করে, তাই GNU সিস্টেমে GNU প্রসারিত নিয়মিত এক্সপ্রেশনগুলি নিয়মিত এক্সপ্রেশন vimব্যবহার vimকরে।

মধ্যে vim, ইতিমধ্যে cuonglm দ্বারা দেখানো হয়েছে, এর সমতুল্য index(?!\.php)হবে index\(\.php\)\@!বা \vindex(\.php)@!

জন্য less, কম্পাইল সময় আপনার Regex লাইব্রেরি / এপিআই নির্বাচন করতে পারবেন এবং এর ফলে ব্যবহারের Regex টাইপ হিসাবে:

    --with-regex={auto,gnu,pcre,posix,regcmp,re_comp,
                    regcomp,regcomp-local,none}
        Select a regular expression library  auto

ডিফল্টরূপে যদিও, REG_EXTENDED সহ পসিক্স lessব্যবহার করবে regcomp, সুতরাং আপনি আপনার সিস্টেমের বর্ধিত নিয়মিত এক্সপ্রেশন পেয়ে যাবেন, তাই সাধারণত কিছুটা অনুরূপ grep -E

জিএনইউ এক্সটেন্ডেড রেজিএক্সপ্পে পিছনে কোনও সমতুল্য চেহারা বা অপারেটর সন্ধান করার দরকার নেই।

আপনি এটি কঠিন উপায়ে করতে পারেন:

index($|[^.]|\.($|([^p]|p($|([^h]|h($|[^p]))))))

এর মাধ্যমে less, আপনি সম্ভবত ( ) যুক্ত &লাইনগুলি ফিল্টার করার জন্য কীটি ব্যবহার করতে পারেন এবং তারপরে ( ) অনুসন্ধান করতে পারেন । (আপনি যে লাইনটিতে উপস্থিত রয়েছে সেগুলির অন্যান্য উদাহরণগুলি এখনও মিস করবেন )।index.php&!index\.phpindex/indexindexindex.php


1
আমি মনে করি কোন রেজেজ লাইব্রেরি lessব্যবহার করে তা সংকলিত সময়ের উপর নির্ভর করে।
cuonglm

@ জ্ঞাক, আপনি ঠিক বলেছেন, এটি এখন পিসিআরই সমর্থন করে বলে মনে হয়।
স্টাফেন চ্যাজেলাস

হ্যাঁ, আমরা যদি পরীক্ষা করতে পারবেন lessব্যবহারসমূহ PCREআউটপুট পার্স দ্বারা ldd $(which less)। তবে অন্যান্য লাইব্রেরির সাথে, আপনি কি চেক করার কোনও উপায় জানেন?
cuonglm

1
@ জ্ঞাক, এটি দিয়ে রেগেক্স লাইব্রেরির নাম মুদ্রণ করে less --version
স্টাফেন চেজেলাস

আমি উবুন্টু 12.04 এলটিএস ব্যবহার করি এবং এর সাথে less --verionএটি কেবলমাত্র less 444কপিরাইট সহ প্রিন্ট করে।
cuonglm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.