रेगेक्स: मामले की संवेदनशीलता को अनदेखा करें


316

मैं निम्नलिखित रेगेक्स मामले की संवेदनशीलता को कैसे अनदेखा कर सकता हूं? इसे सभी सही वर्णों से मेल खाना चाहिए, लेकिन अनदेखा करें कि वे कम हैं या अपरकेस।

G[a-b].*

बस दोनों अपरकेस और लोअरकेस को रेगेक्स में शामिल किया है या
रेपेक्स

2
जी [ए-ए-ए-बी]। * इस सामान्य मामले में स्पष्ट होगा, मामले की संवेदनशीलता एफएफ़ प्लेटफ़ॉर्म पर निर्भर है और आप एक प्लेटफ़ॉर्म नहीं दे रहे हैं।
जोआचिम इस्कासन

16
यदि आप जावा का उपयोग कर रहे हैं, तो आप इसे पैटर्न वर्ग के साथ निर्दिष्ट कर सकते हैं Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);:।
james.garriss

यहाँ अधिक जावा विकल्प: blogs.oracle.com/xuemingshen/entry/…
james.garriss

ध्यान दें कि grepआईएनजी के लिए यह केवल -iसंशोधक के अतिरिक्त है । Ex: grep -rni regular_expressionइस 'regular_expression' 'r'ecursively, केस' i'nsensitive के लिए खोज करने के लिए, परिणाम में लाइन 'n'umbers दिखा रहा है।
गेब्रियल स्टेपल्स

जवाबों:


444

मान लें कि आप पूरे रेगेक्स को मामले को अनदेखा करना चाहते हैं , तो आपको iध्वज की तलाश करनी चाहिए । लगभग सभी रेगेक्स इंजन इसका समर्थन करते हैं:

/G[a-b].*/i

string.match("G[a-b].*", "i")

अपनी भाषा / मंच / उपकरण के लिए दस्तावेज़ीकरण की जाँच करें कि कैसे मिलान मोड निर्दिष्ट किए गए हैं।

यदि आप चाहते हैं कि केवल रेगेक्स का हिस्सा असंवेदनशील हो (जैसा कि मेरा मूल उत्तर माना जाता है), तो आपके पास दो विकल्प हैं:

  1. (?i)[और वैकल्पिक रूप से] (?-i)मोड संशोधक का उपयोग करें :

    (?i)G[a-b](?-i).*
  2. सभी बदलाव (यानी लोअरकेस और अपरकेस) को रेगेक्स में रखें - यदि मोड संशोधक समर्थित नहीं हैं तो उपयोगी है:

    [gG][a-bA-B].*

एक अंतिम नोट: यदि आप ASCII के अलावा यूनिकोड वर्णों के साथ काम कर रहे हैं, तो जांच लें कि आपका regex इंजन ठीक से समर्थन करता है या नहीं।


प्रतिभाशाली! इसके लिए काम करता है: perl -pe 's / ^ utf-8 \? B \? * $ // gi' Cancer.1631, मिलान / प्रतिस्थापित स्ट्रिंग "UTF-8? B?" फाइल में कैंसर .1631। यह विफल रहता है: perl -pe 's / ^ utf-8 \? B \? *? $ // g' कर्क .1631, मामला बेमेल होने के कारण।
विक्टोरिया स्टुअर्ट

अगर यह इस तरह का एक विशिष्ट उदाहरण नहीं होता, तो यह पोस्ट अधिक स्पष्ट होती। जैसे कि अगर आप किसी अन्य शब्द जैसे ".txt" और ".TXT" के लिए मामले को अनदेखा करना चाहते हैं। इस जवाब को देखने से मैं अभी भी अनिश्चित हूं कि मैं यह कैसे कर सकता हूं।
काइल ब्रिडेनस्टाइन

किसी कारण से आपके द्वारा पोस्ट किया findगया regex विस्तारित regex में काम नहीं करता है .. उदाहरण के लिए find . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)कोई भी फ़ोल्डर नहीं दिखाता है .. find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)बिना संशोधक के समान एक समान reged सफेद सही फ़ोल्डर दिखाता है। कोई विचार क्यों?
अल्फा_989

यहाँ मैं [a-c]केवल वर्तमान फ़ोल्डर में वर्णों से शुरू होने वाले सभी फ़ोल्डरों को खोजने की कोशिश कर रहा हूँ .. कुछ और हेरफेर करने के लिए ..
Alpha_989

ईमानदारी से मैं उत्तर के मुख्य भाग में विकल्प 2 रखूँगा क्योंकि यह सामान्य है और सभी रेगेक्स इंजनों के साथ काम करता है।
प्यूटरेटो बोरेटो

154

कार्यान्वयन पर निर्भर करता है लेकिन मैं उपयोग करूंगा

(?i)G[a-b].

रूपांतरों:

(?i) case-insensitive mode ON    
(?-i) case-insensitive mode OFF

आधुनिक रेगेक्स जायके आपको नियमित अभिव्यक्ति के केवल हिस्से में संशोधक लागू करने की अनुमति देते हैं। यदि आप रेगेक्स के बीच में संशोधक (? Im) को सम्मिलित करते हैं तो संशोधक केवल रेगेक्स के हिस्से को संशोधक के दाईं ओर लागू करता है। इन स्वादों के साथ, आप उन्हें ऋण चिह्न (। -I) के साथ पूर्ववर्ती मोड बंद कर सकते हैं।

विवरण पृष्ठ से है: https : //www. अनियमित-expressions.info/modifiers.html


यह TortoiseHg के सर्च रेगेक्स इंजन के लिए संशोधक प्रारूप है।
mwolfe02

क्या आप मुझे बता सकते हैं कि यह लिनक्स शेल में कैसे प्राप्त किया जा सकता है (उदाहरण के लिए "जैसे -i" स्विच का उपयोग किए बिना।
कृष्ण गुप्ता

1
यह बताते हुए कि क्या (?i)और कैसे समाप्त होता है ( (?-i)) वास्तव में मददगार होता। इस कारण से आपके हाथ में 1/3 प्रश्न लगभग 1 के बजाय # 1 प्रश्न है, क्योंकि वे इस सूक्ष्म विवरण को स्पष्ट करते हैं।
गेब्रियल स्टेपल्स

55

संवेदनशील मामले की अनदेखी करने वाले 'एबीसी' को मान्य करने के लिए नियमित अभिव्यक्ति

(?i)(abc)

1
पूरी तरह से एंड्रॉइड स्टूडियो लॉगकाट के साथ काम करता है
जो

अजगर में भी काम करता है
conner.xyz

47

iझंडा सामान्य रूप से मामले असंवेदनशीलता के लिए प्रयोग किया जाता है। आप एक ऐसी भाषा यहाँ देना नहीं है, लेकिन यह शायद की तरह कुछ हो जाएगा /G[ab].*/iया /(?i)G[ab].*/


15

पूर्णता के लिए मैं C ++ में नियमित अभिव्यक्तियों के लिए यूनिकोड के साथ समाधान जोड़ना चाहता था:

std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);

if (std::tr1::regex_match(szString, pattern))
{
...
}

1
क्या कोई मुझे स्पष्ट कर सकता है कि यह पद क्यों हटाया गया? स्वीकृत समाधान विशिष्ट कोड का उपयोग करता है और पूर्णता के लिए मैं भाषा के मानक पुस्तकालयों के लिए समाधान जोड़ना चाहता था c ++। मेरी राय में मैंने अधिक सामान्य प्रश्न के लिए अतिरिक्त मूल्य उत्पन्न किया है।
फ्रेंकस्टीन

5

जैसा कि मैंने इस तरह की पोस्ट ( AWK में अज्ञान ) से खोजा था , जाग के पुराने संस्करणों (जैसे वेनिला मैक ओएस एक्स) पर, आपको उपयोग करने की आवश्यकता हो सकती है 'tolower($0) ~ /pattern/'

IGNORECASEया (?i)या /pattern/iतो एक त्रुटि उत्पन्न करेगा या हर पंक्ति के लिए सही लौटेगा।


2

सी#

using System.Text.RegularExpressions;
...    
Regex.Match(
    input: "Check This String",
    pattern: "Regex Pattern",
    options: RegexOptions.IgnoreCase)

विशेष रूप से: विकल्प: RegexOptions.IgnoreCase


1

[gG] [aAbB]। * संभवत: समाधान का अनुकरण करता है यदि पैटर्न बहुत जटिल या लंबा नहीं है।


यह जानना अच्छा लगेगा कि दिए गए प्रश्न के लिए यह उत्तर गलत क्यों है?
अल्फा_989

आपके पास इसका जवाब है "बहुत जटिल या लंबा नहीं है"
रेगैगिटेरिट

यह वास्तव में एकमात्र समाधान है जिसने मेरे मामले के लिए काम किया। इसके अलावा यह सबसे सामान्य समाधान की तरह दिखता है जिसे हर जगह काम करना चाहिए। अन्य सभी उत्तर विशेष रूप से रेगेक्स कार्यान्वयन के लिए बहुत विशिष्ट प्रतीत होते हैं।
पटरेडो बोरेटो

1

पहले से स्वीकार किए गए उत्तरों के अलावा:

ग्रेप का उपयोग:

ध्यान दें कि grepआईएनजी के लिए यह -iसंशोधक के अतिरिक्त है । Ex: grep -rni regular_expressionइस 'regular_expression' 'r'ecursively, केस' i'nsensitive के लिए खोज करने के लिए, परिणाम में लाइन 'n'umbers दिखा रहा है।

इसके अलावा, यहाँ नियमित अभिव्यक्ति की पुष्टि करने के लिए एक बढ़िया उपकरण है: https://regex101.com/

Ex: इस छवि में अभिव्यक्ति और स्पष्टीकरण देखें।

यहां छवि विवरण दर्ज करें

संदर्भ:


0

जावा में, Regexकंस्ट्रक्टर है

Regex(String pattern, RegexOption option)

इसलिए मामलों को अनदेखा करने के लिए, उपयोग करें

option = RegexOption.IGNORE_CASE

0

आप Regex In Visual Studio और Visual Studio Code को ढूंढने / बदलने के लिए अभ्यास कर सकते हैं।

आपको केस के साथ रेगेक्स एक्सप्रेशन के लिए मैच केस और रेगुलर एक्सप्रेशंस दोनों का चयन करना होगा। Else [AZ] यहाँ काम नहीं करेगा। छवि विवरण

विजुअल स्टूडियो 2019 समुदाय


-2

आप अपने प्रारंभिक स्ट्रिंग का नेतृत्व भी कर सकते हैं, जिसे आप पैटर्न मिलान के लिए जांचने जा रहे हैं, निचले मामले में। और क्रमशः अपने पैटर्न निचले मामले के प्रतीकों का उपयोग करना।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.