मैं एक रेगेक्स बनाने की कोशिश कर रहा हूं जो मेल खाता है जब किसी विशेष प्रकार के दोहराए जाने वाले वर्ण नहीं होते हैं और अन्य सभी पात्रों को अनदेखा कर दिया जाता है। शब्द की लंबाई मायने नहीं रखती। भूतपूर्व।

hippos-R-Y-S <--- Matches
hippos-R-Y-Y <--- Does not match
hippos-R-Y-P <--- Matches

फिर से, hippos- टेक्स्ट कुछ भी हो सकता है, लेकिन इसके बाद आने वाले बड़े अक्षरों को [YRPS] के सेट में होना चाहिए। आपकी सहायता के लिए धन्यवाद!!

0
Phil Fugate 3 फरवरी 2017, 19:58

2 जवाब

सबसे बढ़िया उत्तर

[YRPS] कक्षा में बार-बार मेल खाने वाले वर्ण को छोड़ने के लिए आप 2 नकारात्मक लुकहेड के आधार पर इस रेगेक्स का उपयोग कर सकते हैं:

^[^-]+-([YRPS])(?:-(?!\1)([YRPS])(?!.*\2))+$

रेगेक्स डेमो

**रेगेक्स गोलमाल:*

^           # line start
[^-]+       # match 1 or more of any char that is not a -
-           # match literal -
([YRPS])    # match [YRPS] and group it #1
(?:         # start non-capturing group
   -        # match literal -
   (?!\1)   # negative lookahead to assert next char is not same as group #1
   ([YRPS]) # match [YRPS] and group it #2
   (?!.*\2) # negative lookahead to assert next char is not same as group #2
)+          # end non-capture group and + makes it match 1 or more of the same set
$           # end of line
1
anubhava 3 फरवरी 2017, 20:15

यह काम करना चाहिए:

^.*?-([YRPS])-(?!\1)([YRPS])-(?!\1)(?!\2)([YRPS])$

स्पष्टीकरण:

^           : begining of string
  .*?-      : 0 or more any char until dash
  ([YRPS])  : one of the set, captured in group 1
  -         : a dash
  (?!\1)    : negative lookahead, not the same letter as in group 1
  ([YRPS])  : one of the set, captured in group 2
  -         : a dash
  (?!\1)    : negative lookahead, not the same letter as in group 1
  (?!\2)    : negative lookahead, not the same letter as in group 2
  ([YRPS])  : one of the set, captured in group 3
$           : end of string
1
Toto 3 फरवरी 2017, 20:09