নিয়মিত প্রকাশে "কোনও চরিত্র" কীভাবে মেলে?


304

নিম্নলিখিতটি মেলানো উচিত:

AAA123
ABCDEFGH123
XXXX123

আমি কি করতে পারি: ".*123"?


2
এই লিঙ্কটি এমন একটি দৃষ্টিভঙ্গি দেখায় যা কাজ করে বলে মনে হচ্ছে -> [^] + যার অর্থ 'কোনও অক্ষরের সাথে মেলে না', এটি একটি ডাবল নেতিবাচক যা 'কোনও চরিত্রের সাথে মেলে' হিসাবে পুনরায় পড়তে পারে। উত্স - loune.net/2011/02/…
হকিজে

উত্তর:


643

হ্যা, তুমি পারো. এটা কাজ করা উচিত।

  • . = কোন চর
  • \. = আসল বিন্দুর অক্ষর
  • .?= .{0,1}= যেকোন চরের শূন্য বা এক বারের সাথে মেলে
  • .*= .{0,}= যেকোন চর শূন্য বা তার বেশি বারের সাথে মেলে
  • .+= .{1,}= যেকোন চরের সাথে এক বা একাধিক বার মিলবে

22
সর্বদা বিন্দু মানেই কোনও চর নয়। একক লাইন মোড ব্যতিক্রম। \ পি {সমস্ত be হওয়া উচিত
মার্চিয়ান

আপনি কীভাবে এই অক্ষর তালিকার পিছনে স্ল্যাশ অন্তর্ভুক্ত করতে পারেন?
অনুসন্ধান ফলাফল ওয়েব ফলাফল পাই

1
@ পিপিলিওনস্টকিং পশ্চাদপদ স্ল্যাশ `\\
P

58

হ্যাঁ এটি কার্যকর হবে, যদিও নোটটি .নতুন লাইনের সাথে মেলে না তবে অভিব্যক্তিটি সংকলনের সময় আপনি ডটল পতাকাটি পাস না করে:

Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();

11
এটি কিছু খুব দরকারী তথ্য! আমি ধরেছি .নতুন লাইনের সাথে মিলবে। আমি আপনার উত্তর পড়তে পেরে আনন্দিত, আমার এটি ব্যবহার করা দরকার!
বেন কেন

আপনার কখনও কখনও প্রাসঙ্গিক ক্ষেত্রে জাভা রেজেক্সেসগুলিতে নিউলাইনগুলি মেলানোর প্রয়োজন হতে পারে যেখানে আপনি প্যাটার্ন.ডটল পাস করতে পারবেন না, যেমন Eclipse এ মাল্টি-লাইন রেজেক্স অনুসন্ধান করার সময়, বা রেগেক্স অনুসন্ধানের প্রস্তাব দেয় এমন কোনও জাভা অ্যাপ্লিকেশন ব্যবহারকারী হিসাবে as নিয়মিত-এক্সপ্রেশন.ইনফো-র গাইডের উপর ভিত্তি করে , আপনাকে {.,\n,\r,\u2028,\u2029,\u0085}একেবারে কোনও চরিত্রের সাথে মিল রাখতে ব্যবহার করতে হতে পারে (ইউনিকোড অক্ষরগুলি অতিরিক্ত লাইন-টার্মিনেটিং অক্ষরগুলি .জাভাতে মেলেনি ) তবে কেবল {.,\n,\r}বেশিরভাগ পাঠ্য ফাইলের জন্যই কাজ করবে।
থিওডোর মুরডক

8
@TheodoreMurdock [\s\S]কোনো চরিত্র মিলে যদি আপনি DOTALL ব্যবহার করতে পারবেন না একটি জনপ্রিয় উপায়।
এমপেন

যদি এটি আপনার মনে আসে (?:.|\\v)*, জেডিকে -৩373799৯৯৩ এর কারণে ব্যবহার করবেন না ।
অলিভিয়ার কইলক্স

22

যে .কোনও চরিত্রের সাথে একবার মিলার জন্য প্যাটার্নটি ব্যবহার করুন , .*যে কোনও অক্ষর শূন্য বা আরও বেশি বারের .+সাথে মিলিত করতে , কোনও চরিত্রকে এক বা একাধিকবার মেলাতে।


11

প্রচুর পরিশীলিত রেজেক্স টেস্টিং এবং ডেভলপমেন্ট সরঞ্জাম রয়েছে তবে জাভাতে যদি আপনি কেবল একটি সাধারণ পরীক্ষার জোতা চান তবে আপনার সাথে খেলাটি এখানে একটি:

    String[] tests = {
        "AAA123",
        "ABCDEFGH123",
        "XXXX123",
        "XYZ123ABC",
        "123123",
        "X123",
        "123",
    };
    for (String test : tests) {
        System.out.println(test + " " +test.matches(".+123"));
    }

এখন আপনি সহজেই নতুন টেস্টকেসগুলি যুক্ত করতে পারেন এবং নতুন নিদর্শনগুলি চেষ্টা করতে পারেন। Regex অন্বেষণ মজা করুন।

আরো দেখুন


1
কেবল নিয়মিত- এক্সপ্রেসন.ইন.ফো লিঙ্কের জন্য আপভোট করুন। নিয়মিত অভিব্যক্তি শেখার জন্য এবং রেফারেন্সের জন্য দুর্দান্ত সাইট।
ফ্রেইইট

9

না, *শূন্য বা আরও বেশি অক্ষরের সাথে মিলবে। আপনার ব্যবহার করা উচিত +, যা পরিবর্তে এক বা একাধিকের সাথে মেলে।

এই অভিব্যক্তিটি আপনার পক্ষে আরও ভাল কাজ করতে পারে: [A-Z]+123


1
এখানে উপনীত। ওপি সুনির্দিষ্টভাবে উল্লেখ করে নি তবে এটি যুক্ত করা সঠিক বলে মনে হচ্ছে যে প্যাটার্নটি ### 123, 123123,% $ # 123 এর মতো কোনও চরিত্রের সাথে মেলে যা ওপি নাও চায়। উপরের চরিত্রের ক্লাসটি @ হিউসোম সমস্ত ওপিকে কেবলমাত্র বড় হাতের অক্ষরগুলি ব্যবহার করবে যা উদ্দেশ্য হতে পারে।
টেকডুড

9

আমি এটিকে এনকোড করার সবচেয়ে সাধারণ উপায়টি হ'ল এমন একটি চরিত্র শ্রেণীর সাথে যার সদস্যরা সমস্ত সম্ভাব্য অক্ষরের সেটটির বিভাজন তৈরি করে।

সাধারণত মানুষ লিখতে যে হিসাবে [\s\S](হোয়াইটস্পেস বা অ- হোয়াইটস্পেস), যদিও [\w\W], [\d\D]ইত্যাদি সব কাজ করবে।


2
রেফারেন্সের জন্য, নিয়মিত- এক্সপ্রেসনস.ইনফো / ডট এইচটিএমএল থেকে : "জাভাস্ক্রিপ্ট এবং ভিবিএস স্ক্রিপ্টের সাথে ডট ম্যাচ লাইন বিরতি অক্ষর তৈরি করার বিকল্প নেই those এই ভাষাগুলিতে আপনি [\ s \ S] এর মতো একটি অক্ষর শ্রেণি ব্যবহার করতে পারেন] যে কোনও চরিত্রের সাথে মেলে এই চরিত্রটি এমন একটি চরিত্রের সাথে মেলে যা হয় হয় শ্বেতক্ষেত্রের অক্ষর (লাইন বিরতির অক্ষর সহ), অথবা এমন একটি অক্ষর যা একটি সাদা বর্ণের অক্ষর নয় all সমস্ত অক্ষর যেহেতু হোয়াইটস্পেস বা অ-সাদা স্থানের, তাই এই অক্ষর শ্রেণিটি কোনও চরিত্রের সাথে মেলে । "
ডিন বা

7

.*এবং .+নতুন লাইন ব্যতীত যে কোনও চরিত্রের জন্য।

ডাবল এসকেপিং

কেবলমাত্র আপনি নতুন লাইন অন্তর্ভুক্ত করতে চেয়েছিলেন, নিম্নলিখিত ভাষাগুলি সেই ভাষাগুলির জন্যও কাজ করতে পারে যা দ্বিগুণ প্রস্থান যেমন জাভা বা সি ++ এর মতো প্রয়োজন:

[\\s\\S]*
[\\d\\D]*
[\\w\\W]*

শূন্য বা আরও বেশি বারের জন্য, বা

[\\s\\S]+
[\\d\\D]+
[\\w\\W]+

এক বা একাধিকবার

একক এসকেপিং:

সি #, পিএইচপি, রুবি, পিইআরএল, পাইথন, জাভাস্ক্রিপ্টের মতো কয়েকটি ভাষার জন্য ডাবল পলায়নের প্রয়োজন নেই:

[\s\S]*
[\d\D]*
[\w\W]*
[\s\S]+
[\d\D]+
[\w\W]+

পরীক্ষা

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){

        final String regex_1 = "[\\s\\S]*";
        final String regex_2 = "[\\d\\D]*";
        final String regex_3 = "[\\w\\W]*";
        final String string = "AAA123\n\t"
             + "ABCDEFGH123\n\t"
             + "XXXX123\n\t";

        final Pattern pattern_1 = Pattern.compile(regex_1);
        final Pattern pattern_2 = Pattern.compile(regex_2);
        final Pattern pattern_3 = Pattern.compile(regex_3);

        final Matcher matcher_1 = pattern_1.matcher(string);
        final Matcher matcher_2 = pattern_2.matcher(string);
        final Matcher matcher_3 = pattern_3.matcher(string);

        if (matcher_1.find()) {
            System.out.println("Full Match for Expression 1: " + matcher_1.group(0));
        }

        if (matcher_2.find()) {
            System.out.println("Full Match for Expression 2: " + matcher_2.group(0));
        }
        if (matcher_3.find()) {
            System.out.println("Full Match for Expression 3: " + matcher_3.group(0));
        }
    }
}

আউটপুট

Full Match for Expression 1: AAA123
    ABCDEFGH123
    XXXX123

Full Match for Expression 2: AAA123
    ABCDEFGH123
    XXXX123

Full Match for Expression 3: AAA123
    ABCDEFGH123
    XXXX123

আপনি যদি এক্সপ্রেশনটি অন্বেষণ করতে চান তবে এটি regex101.com এর ডানদিকের প্যানেলে ব্যাখ্যা করা হয়েছে । আপনি যদি চান, আপনি এই লিঙ্কটিতেও দেখতে পারেন , কীভাবে এটি কিছু নমুনার ইনপুটগুলির সাথে মেলে।


রেজেক্স সার্কিট

jex.im নিয়মিত এক্সপ্রেশন ভিজ্যুয়ালাইজ করে:

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


1
ইতিমধ্যে এখানে কি উত্তর দেওয়া হয়নি? stackoverflow.com/a/55149095/5424988
চতুর্থ পাখি

আমি (\W|\w)*ডাবল পলায়নের পরিবর্তে
সুদীপ ভট্টরাই

1
সত্যই সহায়ক ব্যাখ্যা
নাগীবাবা

5

উদাহরণস্বরূপ সমস্যার নির্দিষ্ট সমাধান: -

ব্যবহার করে দেখুন [A-Z]*123$ম্যাচ হবে 123, AAA123, ASDFRRF123। ক্ষেত্রে আপনার 123ব্যবহারের আগে কমপক্ষে একটি চরিত্রের প্রয়োজন [A-Z]+123$

প্রশ্নের সাধারণ সমাধান (নিয়মিত প্রকাশের "কোনও চরিত্রের সাথে কীভাবে" মেলে)

  1. আপনি যদি হোয়াইটস্পেস সহ কিছু খুঁজছেন তবে চেষ্টা করতে পারেন [\w|\W]{min_char_to_match,}
  2. যদি আপনি হোয়াইটস্পেস ব্যতীত অন্য কোনও কিছুর সাথে মেলে চেষ্টা করে দেখতে পারেন [\S]{min_char_to_match,}

2

[^]নিউলাইন সহ যে কোনও চরিত্রের সাথে মেলে। [^অক্ষর] ঐ ছাড়া সব অক্ষরের সাথে মেলে অক্ষর । যদি অক্ষর খালি থাকে, এটা সব অক্ষরের সাথে মেলে।

জাভাস্ক্রিপ্ট উদাহরণ:

/a[^]*Z/.test("abcxyz \0\r\n\t012789ABCXYZ") // Returns ‘true’.

আপনি কি চেষ্টা করেছেন তা আমাদের জানানোর জন্য কিছু কোড যুক্ত করতে আপত্তি করবেন?
জেনিস বৈষ্ণব

1

রেজেক্স চেষ্টা করুন .{3,}। এটি একটি নতুন লাইন বাদে সমস্ত অক্ষরের সাথে মিলবে।


-4

আমি এটি সর্বদা বিন্দুতে কাজ করি মানে কোনও চর। একক লাইন মোড ব্যতিক্রম। \p{all}হতে হবে

String value = "|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";
String expression = "[a-zA-Z0-9\\p{all}]{0,50}";
if(value.matches(expression)){
    System.out.println("true");
} else {
    System.out.println("false");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.