मुझे सब कुछ मैच करने में सक्षम रेगीक्स की आवश्यकता है लेकिन एक विशिष्ट पैटर्न के साथ शुरू होने वाली एक स्ट्रिंग (विशेष रूप से index.phpऔर इस प्रकार, जैसे index.php?id=2342343)
मुझे सब कुछ मैच करने में सक्षम रेगीक्स की आवश्यकता है लेकिन एक विशिष्ट पैटर्न के साथ शुरू होने वाली एक स्ट्रिंग (विशेष रूप से index.phpऔर इस प्रकार, जैसे index.php?id=2342343)
जवाबों:
Regexp विशेषज्ञ नहीं है, लेकिन मुझे लगता है कि आप शुरू से ही नकारात्मक लुकहेड का उपयोग कर सकते हैं, उदाहरण के ^(?!foo).*$साथ शुरू होने वाले कुछ से मेल नहीं खाना चाहिए foo।
^((?!foo).)*$( stackoverflow.com/a/406408/3964381 )
रेगेक्स: मैच सब कुछ लेकिन :
foo):
world.अंत में नहीं):
foo) (कोई POSIX अनुरूप पेटरन, क्षमा करें):
|प्रतीक से मेल खाने से बचें ):
foo):
cat): /cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/iया/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is(cat)|[^c]*(?:c(?!at)[^c]*)*(या (?s)(cat)|(?:(?!cat).)*, या (cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*) और फिर भाषा के साथ जांच का अर्थ है: यदि समूह 1 का मिलान हुआ है, तो यह वह नहीं है जो हमें चाहिए, अन्यथा, खाली नहीं होने पर मैच मान को पकड़ो[^a-z]+(किसी भी चार अक्षर से नीचे का ASCII अक्षर)|:[^|]+डेमो नोट : न्यूलाइन \nका उपयोग डेमो में नकारात्मक चरित्र वर्ग के अंदर किया जाता है ताकि पड़ोसी लाइन (एस) के लिए अतिप्रवाह से बचा जा सके। व्यक्तिगत तारों का परीक्षण करते समय वे आवश्यक नहीं होते हैं।
एंकर ध्यान दें : कई भाषाओं में, \Aस्ट्रिंग के बहुत ही अंत को परिभाषित करने के लिए , और स्ट्रिंग के अस्पष्ट शुरुआत को परिभाषित करने के लिए उपयोग करें \z(पायथन में, यह \Zजावास्क्रिप्ट $में ठीक है)।
डॉट नोट : कई स्वादों में (लेकिन POSIX, TRE, TCL नहीं) .किसी भी चार से मेल खाता है लेकिन एक नई लाइन चार से मेल खाता है । सुनिश्चित करें कि आप एक नई तिथि सहित किसी भी चार्ट से मेल खाने के लिए एक संबंधित DOTALL संशोधक ( /sPCRE / Boost / .NET / Python / Java में और /mरूबी में) का उपयोग .करें।
बैकस्लैश नोट : उन भाषाओं में जहां आपको सी स्ट्रिंग्स के साथ पैटर्न की घोषणा करनी होती है ताकि बच अनुक्रमों (जैसे \nएक नई रेखा के लिए) की अनुमति हो, आपको विशेष वर्णों से बचने वाले बैकस्लैशों को दोगुना करने की आवश्यकता होती है ताकि इंजन उन्हें शाब्दिक पात्रों के रूप में व्यवहार कर सके (जैसे जावा में, अक्षर world\.होगा) के रूप में घोषित "world\\.", या एक चरित्र वर्ग का उपयोग करें:) "world[.]"। कच्चे स्ट्रिंग शाब्दिक (पायथन r'\bworld\b'), सी # @"world\."वर्बटीम स्ट्रिंग शाब्दिक , या स्लेश स्ट्रिंग्स / रेगेक्स शाब्दिक संकेतन का उपयोग करें /world\./।
^(?!foo$), ऐसा क्यों है कि अभिव्यक्ति का काम करने के लिए डॉलर के संकेत को कोष्ठक के भीतर होना चाहिए? मैं ^(?!foo)$समान परिणाम देने की उम्मीद कर रहा था , लेकिन ऐसा नहीं है।
$एंकर लुकहेड के अंदर होता है, तो यह शर्त का हिस्सा होता है, उस शून्य-चौड़ाई के दावे का हिस्सा । यदि यह बाहर की तरह था ^(?!foo)$, तो यह स्ट्रिंग के शुरू होने के बाद स्ट्रिंग के अंत की आवश्यकता वाले उपभोग पैटर्न का हिस्सा होगा , जिससे नकारात्मक रूपांतर अप्रासंगिक हो जाएगा क्योंकि यह हमेशा सही होगा (स्ट्रिंग के अंत के बाद कोई पाठ नहीं हो सकता है) अकेले चलो foo)। तो, ^(?!foo$)एक स्ट्रिंग की शुरुआत होती है fooजो स्ट्रिंग अंत के साथ पीछा नहीं किया जाता है। ^(?!foo)$एक खाली स्ट्रिंग से मेल खाता है।
cotया lan, और जैसे मैच निकालने के लिए, regex.replace(myString, "^.*?(?:cot|lan)\s*", "")।
आप ^एक चरित्र की शुरुआत में कुछ भी लेकिन उन पात्रों से मेल खाने के लिए सेट कर सकते हैं।
[^=]*
सब कुछ मेल खाएगा लेकिन =
बस मैच /^index\.php/जो भी हो उसे अस्वीकार कर दें।
str !~ /\Aindex\.php/।
मैं करने के लिए एक regex में सक्षम की जरूरत है सब कुछ से मेल खाते हैं लेकिन सिवाय एक के साथ शुरू स्ट्रिंग
index.phpएक विशिष्ट पैटर्न (विशेष रूप से index.php और क्या इस प्रकार है, index.php की तरह? Id = 2,342,343)
विधि Exec का उपयोग करें
let match,
arr = [],
myRe = /([\s\S]+?)(?:index\.php\?id.+)/g;
var str = 'http://regular-viragenia/index.php?id=2342343';
while ((match = myRe.exec(str)) != null) {
arr.push(match[1]);
}
console.log(arr);
var myRe = /([\s\S]+?)(?:index\.php\?id=.+)/g;
var str = 'http://regular-viragenia/index.php?id=2342343';
var matches_array = myRe.exec(str);
console.log(matches_array[1]);
या अन्य सामग्री
let match,
arr = [],
myRe = /index.php\?id=((?:(?!index)[\s\S])*)/g;
var str = 'http://regular-viragenia/index.php?id=2342343index.php?id=111index.php?id=222';
while ((match = myRe.exec(str)) != null) {
arr.push(match[1]);
}
console.log(arr);
रेगेक्स का उपयोग न करने के बारे में:
// In PHP
0 !== strpos($string, 'index.php')
grepकमांड-लाइन पर उपयोग कर सकते हैं , उदाहरण के लिए, या पर्ल / पायथन / किसी भी अन्य भाषा, या एक पाठ संपादक, आदि में "हर पंक्ति के लिए इस regex निष्पादित करें ...)