রিজেক্স অপারেটর নয়


127

রেজেক্সেসে কি নেই অপারেটর? স্ট্রিংয়ের মতো:"(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)"

আমি সব মুছে ফেলতে চান \([0-9a-zA-z _\.\-:]*\)কিন্তু এক যেখানে এটি একটি বছর না: (2001)

তাই কি Regex ফেরত পাঠাবেন হতে হবে: (2001) name

দ্রষ্টব্য: এর মতো কিছু \((?![\d]){4}[0-9a-zA-z _\.\-:]*\)আমার পক্ষে কাজ করে না ( (20019)কোনওভাবে এটিও মেলে ...)


4
সেখানে উপরে মত একটি স্ট্রিং এবং আমি এটি আপ Regex করতে, Regex ফল যে চাই: (2001) name
সোনেনহুট

উত্তর:


121

না, সরাসরি কোনও অপারেটর নেই। কমপক্ষে আপনি যেভাবে আশা করছেন তা নয়।

তবে আপনি একটি শূন্য প্রস্থের নেতিবাচক চেহারাটি ব্যবহার করতে পারেন:

\((?!2001)[0-9a-zA-z _\.\-:]*\)

(?!...)টেক্সট যদি অংশ মানে হলো "শুধুমাত্র মেলে নিম্নলিখিত (: lookahead অত: পর) এই নেই (অত: পর: ঋণাত্মক)। এই ম্যাচে কিন্তু এটা আসলে নেই গ্রাস অক্ষর মিলবে (অত: পর: শূন্য প্রস্থ)।

আসলে আছে 4 সমন্বয় lookarounds 2 অক্ষ সঙ্গে

  • lookbehind / lookahead: পয়েন্টটি বিবেচনা করার আগে বা পরে অক্ষরগুলি নির্দিষ্ট করে
  • ধনাত্মক / নেতিবাচক: বর্ণগুলি অবশ্যই মেলে বা না মিলবে কিনা তা নির্দিষ্ট করে ।

ধন্যবাদ !? আমিও এটাই পরামর্শ \((?![\d]{4})[0-9a-zA-z _\.\-:]+\)(20019)
দিচ্ছিলাম

আপনার প্রশ্নের সম্পাদনায় আপনি {4} বাইরে চেহারাটি বাইরে রেখেছেন এবং এই মন্তব্যে আপনি এটি ভিতরে রেখেছেন : আপনি কোনটি চেষ্টা করেছেন? এছাড়াও: আপনি যদি (20019)মেলাতে চান তবে অবশ্যই আপনার চেহারাটির \) অভ্যন্তরটি অবশ্যই যুক্ত করতে হবে :\((?![\d]{4}\))[0-9a-zA-z _\.\-:]+\)
জোছিম সউর

আপনার মন্তব্যে উপরের রেজেক্সের সাথে, এটি কাজ করে। কিন্তু আমি বুঝতে পারছি না ... আপনি নীচের অংশটি কেন পালিয়েছেন তা আমি পাই না তবে \((?![\d]{4} -->\)<--)[0-9a-zA-z _\.\-:]+\)সেখানে বন্ধনী বন্ধ নেই, তাই না?
সোনেনহুট

আমি বন্ধ হওয়া বন্ধনী থেকে বাঁচতে পেরেছি )কারণ আমি আক্ষরিক চরিত্রের সাথে মেলে রাখতে চাই )(ঠিক যেমন আপনি প্রথম দিকে করেন এবং আপনার রেজেক্সের একেবারে শেষের দিকে!)। তারপরে আমি এটির সাথে মিলে যাওয়ার পরে , আমি একটি অনস্কেপড ব্যবহার করে চেহারা শেষ করি )
জোছিম সউর

বুঝেছি. আমি এই সমস্ত চরিত্রটি দেখে কিছুটা বিভ্রান্ত হয়ে পড়েছিলাম। ধন্যবাদ.
সোনেনহুট

198

বেশ নয়, যদিও আপনি সাধারণত ফর্মগুলির একটিতে কিছুটা ব্যবহার করতে পারেন

  • [^abc], যা চরিত্র অনুসারে নয় aবা bবা c,
  • বা নেতিবাচক চেহারা: a(?!b)যা aঅনুসরণ করে নাb
  • বা নেতিবাচক লুকবিহাইন্ড:, (?<!a)bযা এর আগে হয় bনাa

হ্যাঁ, আমি মনে করি নেতিবাচক চেহারা পিছনে (? <! A) খ - রেফারেন্স: নিয়মিত- এক্সপ্রেসন.ইন.ফো
ভিউয়ারাউন্ড

10
কিন্তু [^abc]না অর্থ কি হওয়া উচিত aবা bবা cনা "নয় স্ট্রিং abc"।
বৃষ্টি

0

আপনি (2001)অংশটি ক্যাপচার করতে পারবেন এবং বাকীটি কিছুই দিয়ে প্রতিস্থাপন করতে পারবেন।

public static string extractYearString(string input) {
    return input.replaceAll(".*\(([0-9]{4})\).*", "$1");
}

var subject = "(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)";
var result = extractYearString(subject);
System.out.println(result); // <-- "2001"

.*\(([0-9]{4})\).* মানে

  • .* কিছু মিল
  • \(একটি (চরিত্র মেলে
  • ( ক্যাপচার শুরু
  • [0-9]{4} যে কোনও একক অঙ্ক চারবার
  • ) শেষ ক্যাপচার
  • \)একটি )চরিত্র মেলে
  • .* কিছু (বাকী স্ট্রিং)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.