नियमित अभिव्यक्ति में "किसी भी चरित्र" से कैसे मिलान करें?


304

निम्नलिखित का मिलान किया जाना चाहिए:

AAA123
ABCDEFGH123
XXXX123

क्या मैं कर सकता हूँ ".*123":?


2
यह लिंक एक ऐसा दृष्टिकोण दिखाता है जो काम करने लगता है -> [^] + जिसका अर्थ है 'कोई वर्णों से मेल नहीं खाता', एक दोहरा नकारात्मक जो 'किसी भी वर्ण से मेल खाता है' के रूप में फिर से पढ़ा जा सकता है। स्रोत - loune.net/2011/02/…
हॉकी

जवाबों:


643

हाँ तुम कर सकते हो। वह काम करना चाहिए।

  • . = कोई भी चार
  • \. = वास्तविक डॉट चरित्र
  • .?= .{0,1}= किसी भी चार शून्य या एक बार मैच
  • .*= .{0,}= किसी भी चार या अधिक बार मैच
  • .+= .{1,}= किसी भी चार या एक से अधिक बार मिलान करें

22
हमेशा डॉट का मतलब कोई चार नहीं है। एकल लाइन मोड जब अपवाद। \ p {सब} होना चाहिए
मंगल

आप इस चरित्र सूची में पिछड़े स्लैश को कैसे शामिल कर सकते हैं?
खोज परिणाम वेब परिणाम Pi

1
@pippilongstocking पिछड़े स्लैश `\\` है
Poutrathor

58

हां, यह काम करेगा, हालांकि ध्यान दें कि .जब तक आप अभिव्यक्ति को संकलित नहीं करते तब तक डोटल ध्वज पास नहीं होगा।

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

11
यह कुछ बहुत ही उपयोगी जानकारी है! मैंने मान लिया .कि मैं नई कहानियों से मेल खाऊंगा। मुझे खुशी है कि मैंने आपका उत्तर पढ़ा, मुझे इसका उपयोग करने की आवश्यकता है!
बेन केन

आपको कभी-कभी ऐसे संदर्भों में भी जावा रेगेक्स में नईलाइनों का मिलान करने की आवश्यकता हो सकती है, जहां आप पैटर्न को पास नहीं कर सकते हैं। जैसे कि एक्लिप्स में एक बहु-पंक्ति रेगेक्स खोज करते समय, या किसी भी जावा एप्लिकेशन के उपयोगकर्ता के रूप में जो कि रेक्सक्स खोज प्रदान करता है। नियमित रूप से अभिव्यक्ति.info के मार्गदर्शिका के आधार पर , आपको {.,\n,\r,\u2028,\u2029,\u0085}किसी भी वर्ण से मेल खाने के लिए उपयोग करने की आवश्यकता हो सकती है (यूनिकोड वर्ण अतिरिक्त पंक्ति-समाप्ति वर्ण हैं जो .कि जावा से मेल नहीं खाते हैं ), लेकिन बस {.,\n,\r}अधिकांश पाठ फ़ाइलों के लिए काम करेंगे।
थियोडोर मर्डॉक

8
@ TheodoreMurdock [\s\S]किसी भी वर्ण के मिलान का एक लोकप्रिय तरीका है यदि आप DOTALL का उपयोग नहीं कर सकते हैं।
मपेन

JDK-6337993 के(?:.|\\v)* कारण , यह आपके दिमाग में आएगा, इसका उपयोग न करें ।
ओलिवियर Cailloux

22

.किसी भी पात्र को एक बार .*या उससे अधिक बार .+मिलान करने के लिए , किसी भी वर्ण को शून्य या अधिक बार मिलान करने के लिए पैटर्न का उपयोग करें ।


11

परिष्कृत रेगेक्स परीक्षण और विकास उपकरण बहुत सारे हैं, लेकिन यदि आप जावा में एक साधारण परीक्षण हार्नेस चाहते हैं, तो यहां आपके साथ खेलने के लिए एक है:

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

अब आप आसानी से नए टेस्टकेस जोड़ सकते हैं और नए पैटर्न आज़मा सकते हैं। मज़ा खोज regex है।

यह सभी देखें


1
बस रेगुलर-expressions.info लिंक के लिए अपवोट करें। नियमित अभिव्यक्ति सीखने और संदर्भ के लिए अद्भुत साइट।
Freiheit

9

नहीं, *शून्य या अधिक वर्णों से मेल खाएगा। आपको उपयोग करना चाहिए +, जो इसके बजाय एक-या-अधिक से मेल खाता है।

यह अभिव्यक्ति आपके लिए बेहतर काम कर सकती है: [A-Z]+123


1
यहाँ अपवोट करें। ओपी निर्दिष्ट नहीं किया है, लेकिन यह जोड़ना सही लगता है कि पैटर्न किसी भी चरित्र से मेल खाएगा जिसमें ### 123, 123123,% $ # 123 जैसी चीजें शामिल हैं जो ओपी नहीं चाहेगा। वर्ण वर्ग @Huusom उपरोक्त सभी ओपी केवल अपरकेस वर्णमाला का उपयोग करने के लिए उपयोग करेगा जो आशय हो सकता है।
टेकड्यूड

9

इसका सबसे आम तरीका मैंने देखा है कि यह एक चरित्र वर्ग के साथ है, जिसके सदस्य सभी संभावित पात्रों के सेट का एक विभाजन बनाते हैं।

आम तौर पर लोग लिखते हैं कि के रूप में [\s\S](खाली स्थान या गैर-सफ़ेद), हालांकि [\w\W], [\d\D], आदि सभी काम करेगा।


2
संदर्भ के लिए, regular-expressions.info/dot.html से : "जावास्क्रिप्ट और वीबीएसस्क्रिप्ट में डॉट मैच लाइन ब्रेक वर्ण बनाने का विकल्प नहीं है। उन भाषाओं में, आप एक चरित्र वर्ग जैसे [\ s \ _] का उपयोग कर सकते हैं। किसी भी चरित्र से मेल खाने के लिए। यह चरित्र एक ऐसे चरित्र से मेल खाता है जो या तो एक व्हाट्सएप चरित्र है (जिसमें लाइन ब्रेक वर्ण भी शामिल है), या एक ऐसा चरित्र जो कि एक व्हाट्सएप चरित्र नहीं है। । "
डीन या

7

.*और .+नई लाइनों को छोड़कर किसी भी वर्ण के लिए हैं।

डबल भागने

यदि आप नई पंक्तियों को शामिल करना चाहते हैं, तो निम्नलिखित अभिव्यक्तियाँ उन भाषाओं के लिए भी काम कर सकती हैं, जिनमें जावा या C ++ जैसे दोहरे पलायन की आवश्यकता होती है:

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

शून्य या अधिक समय के लिए, या

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

एक या अधिक बार के लिए।

एकल बचना:

कुछ भाषाओं जैसे कि C #, PHP, Ruby, PerL, Python, JavaScript के लिए दोहरी पलायन की आवश्यकता नहीं है:

[\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 के शीर्ष दाएं पैनल पर समझाया गया है । यदि आप चाहें, तो आप इस लिंक में भी देख सकते हैं कि यह कुछ नमूना इनपुटों के साथ कैसे मेल खाता है।


RegEx सर्किट

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

[^]न्यूलाइन सहित किसी भी वर्ण से मेल खाना चाहिए। [^CHARS] में उन लोगों को छोड़कर सभी से मेल खाता है CHARS । यदि CHARS रिक्त है, तो यह सभी वर्णों से मेल खाता है।

जावास्क्रिप्ट उदाहरण:

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

क्या आप यह जानने के लिए कुछ कोड जोड़ना चाहेंगे कि आपने क्या प्रयास किया है?
जैसन वैष्णव 12

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");
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.