রেজেক্স ম্যাচের পরে নিম্নলিখিত পাঠ্যটি পাওয়া


87

আমি রেজেক্স ব্যবহারে নতুন, আমি টিউটোরিয়ালগুলির একদল পেরিয়ে গিয়েছি তবে আমি যা করতে চাই তার সাথে প্রযোজ্য এমন একটি পাইনি,

আমি কোনও কিছুর সন্ধান করতে চাই, তবে এটি অনুসরণ করে সমস্ত কিছু ফিরিয়ে দেব তবে অনুসন্ধানের স্ট্রিংটি নয়

উদাহরণস্বরূপ " কিছু লম্পট বাক্য যা দুর্দান্ত "

" বাক্য " অনুসন্ধান করুন

প্রত্যাবর্তন " যে দুর্দান্ত "

কোন সাহায্যের অনেক প্রশংসা হবে

এটি এখন পর্যন্ত আমার রেজেক্স

sentence(.*) 

তবে এটি ফিরে আসে: বাক্যটি দুর্দান্ত

Pattern pattern = Pattern.compile("sentence(.*)");

Matcher matcher = pattern.matcher("some lame sentence that is awesome");

boolean found = false;
while (matcher.find())
{
    System.out.println("I found the text: " + matcher.group().toString());
    found = true;
}
if (!found)
{
    System.out.println("I didn't find the text");
}

আপনার আসল কল কি? আপনি ব্যবহার করছেন Matcher?
গ্রজেগোর্জ ওলেডজকি

আমি ম্যাচার এবং প্যাটার্নটি ব্যবহার করছি
স্কট

... এবং কী ঘটছে তা মূল্যায়নের জন্য আমরা এখনও আপনার প্রকৃত জাভা কোডটি দেখতে চাই।
স্টিভ জর্জেনসেন

System.out.println("I found the text: " + "some lame sentance that is aweomse".substring(end()));
নিশান্ত

4
@ ডেভিডআইএসনিহির নাজির একটি রাজধানী এন হওয়া উচিত ...
লি টেলর

উত্তর:


141

আপনি একটি মন্তব্যে যেমন জিজ্ঞাসা করেছিলেন তেমন "কেবলমাত্র নিয়মিত প্রকাশ" দিয়ে এটি করতে পারেন:

(?<=sentence).*

(?<=sentence)একটি ইতিবাচক দাবী নিখুঁত দাবি । এটি স্ট্রিংয়ের একটি নির্দিষ্ট অবস্থানে মেলে, যথা sentenceপাঠটিকে নিজেই ম্যাচের অংশ না বানিয়ে পাঠ্যের ঠিক পরে অবস্থানে । ফলস্বরূপ, এর (?<=sentence).*পরে কোনও পাঠ্যের সাথে মিলবে sentence

এটি রেগেক্সের একটি দুর্দান্ত বৈশিষ্ট্য। যাইহোক, জাভাতে এটি কেবল সীমাবদ্ধ দৈর্ঘ্যের সুবে এক্সপ্রেসনের জন্য কাজ করবে, যেমন (?<=sentence|word|(foo){1,4})আইনী, তবে (?<=sentence\s*)তা নয়।


আপনি উল্লেখ করেছেন যে এটিতে ইতিবাচক দৃষ্টিভঙ্গি অনুসারে অন্তর্ভুক্ত করা উচিত নয়। সুতরাং আমি ধরে নিয়েছি যে "। * (? <= বাক্য)" "সবকিছু" পর্যন্ত প্রদান করা উচিত, তবে "বাক্য" অন্তর্ভুক্ত নয়। তবে এটি হয় না, এটি "বাক্য "ও প্রদান করে। আমি কী মিস করছি?
জেজে জোনস_২60০

@ ব্যবহারকারী 2184214: কারণ এটি দৃ behind়তার পিছনে একটি চেহারা । .*যে কোনও পাঠ্যের সাথে মেলে এবং তারপরে (?<=...)শব্দের পিছনের দিকে sentenceতাকাবে, এই ক্ষেত্রে দৃser়তার সাথে দাবি করে যে ম্যাচটি সেই শব্দটির সাথেই শেষ হয়। আপনি যে আগে কোনো শব্দ বন্ধ করতে চান, আপনি প্রদর্শন করতে হবে এগিয়ে : .*(?=sentence)কোন পাঠ্য দ্বারা অনুসরণ করা হয় ম্যাচ হবে sentence
টিম পিটজ্যাকার

17

আপনার রেজেক্স "sentence(.*)"ঠিক আছে। প্রথম বন্ধনীতে গ্রুপের সামগ্রীগুলি পুনরুদ্ধার করতে, আপনি কল করবেন:

Pattern p = Pattern.compile( "sentence(.*)" );
Matcher m = p.matcher( "some lame sentence that is awesome" );
if ( m.find() ) {
   String s = m.group(1); // " that is awesome"
}

m.find()এই ক্ষেত্রে ব্যবহারটি নোট করুন (স্ট্রিংটিতে যে কোনও জায়গায় সন্ধানের চেষ্টা করা হয়েছে) এবং না m.matches()("কিছু খোঁড়া" উপসর্গের কারণে ব্যর্থ হবে; এক্ষেত্রে রেজেক্স হওয়া দরকার ".*sentence(.*)")


ধন্যবাদ, তবে আমি যদি এটি ফিরে আসতে চাই তবে "তা দুর্দান্ত"
স্কট

ধন্যবাদ মানুষ, এটি দুর্দান্ত কাজ করেছে, আমি আশা করছিলাম যে এটি কেবল নিয়মিত প্রকাশের সাথে করার একটি উপায় ছিল, যদি আমি সেভাবে এটির জন্য কোনও উপায় খুঁজে না পাই, তবে এটি কাজ করবে
স্কট

পারফরম্যান্সের জন্য
রিজেপেক্সের

8

ম্যাচারের সাথে strম্যাচটির পরে যদি আরম্ভ করা হয় তবে আপনি ম্যাচের সাথে অংশটি পেতে পারেন

str.substring(matcher.end())

কোডের উদাহরণ:

final String str = "Some lame sentence that is awesome";
final Matcher matcher = Pattern.compile("sentence").matcher(str);
if(matcher.find()){
    System.out.println(str.substring(matcher.end()).trim());
}

আউটপুট:

ঐটা অসাধারণ


matcher.find()এর আগে আইএমও দরকার।
নিশান্ত

@ নিশান্ত এটাই আমি লিখেছিলাম: "ম্যাচের পরে"। চিত্রিত করার জন্য নমুনা কোড যুক্ত করা হয়েছে
সান প্যাট্রিক ফ্লয়েড

1

আপনাকে আপনার ম্যাচারের গ্রুপ (ইনট) ব্যবহার করতে হবে - গোষ্ঠী (0) পুরো ম্যাচ, এবং গ্রুপ (1) হ'ল প্রথম দল যা আপনি চিহ্নিত করেছেন। আপনি যে উদাহরণটি নির্দিষ্ট করেছেন তাতে গ্রুপ (1) হ'ল " বাক্য " পরে আসে ।


1

আপনাকে কেবল নিম্নলিখিত লাইনে "গ্রুপ ()" এর পরিবর্তে "গ্রুপ (1)" রাখতে হবে এবং প্রত্যাশাটি আপনি প্রত্যাশা করেছেন:

System.out.println("I found the text: " + matcher.group(**1**).toString());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.