একটি রেজেক্স যা কখনও কোনও কিছুর সাথে মেলে না


131

এটি মূ .় প্রশ্নের মতো মনে হতে পারে তবে আমার কয়েকজন সহকর্মী বিকাশকারীদের সাথে আমার দীর্ঘ আলোচনা হয়েছিল এবং এটি ভাবতে মজাদার জিনিস বলে মনে হয়েছিল।

এরূপই আপনার চিন্তা কি - একটি রেজেক্স দেখতে কেমন লাগে, এটি কোনও স্ট্রিংয়ের সাথে আর কখনও মিলবে না!

সম্পাদনা : আমি কেন এটি চাই? ঠিক আছে, প্রথমত কারণ আমি এই জাতীয় অভিব্যক্তিটি ভাবতে আগ্রহী মনে করি এবং দ্বিতীয়ত কারণ একটি স্ক্রিপ্টের জন্য আমার এটি প্রয়োজন।

এই স্ক্রিপ্টে আমি একটি অভিধান হিসাবে সংজ্ঞায়িত করি Dictionary<string, Regex>। এটিতে যেমন আপনি দেখেন, একটি স্ট্রিং এবং একটি এক্সপ্রেশন রয়েছে।

সেই অভিধানের উপর ভিত্তি করে আমি এমন পদ্ধতি তৈরি করি যা সকলেই এই অভিধানটি কেবল তাদের কাজটি কীভাবে করা উচিত সে বিষয়ে কেবল রেফারেন্স হিসাবে ব্যবহার করে, তাদের মধ্যে একটি পার্সড লগফাইলের বিপরীতে রেজিক্সগুলির সাথে মেলে।

যদি কোনও অভিব্যক্তি মিলে যায় তবে অন্যটিতে Dictionary<string, long>একটি মান যুক্ত করা হয় যা অভিব্যক্তি দ্বারা ফিরে আসে। সুতরাং, অভিধানে কোনও এক্সপ্রেশনের সাথে মেলে না এমন কোনও লগ-বার্তা ধরতে আমি "অজানা" নামে একটি নতুন গ্রুপ তৈরি করেছি।

এই গোষ্ঠীতে অন্য কোনও কিছুর সাথে মেলে না এমন সমস্ত কিছু যুক্ত করা হয়। তবে "অজানা" - এক্সপ্রেশনটিকে লগ-ম্যাসেজের সাথে (দুর্ঘটনাক্রমে) মিল না দেওয়ার জন্য, আমাকে এমন একটি ভাব তৈরি করতে হয়েছিল যা আমি কখনই স্ট্রিংই দিই না কেন, এটি কখনও মেলে না।

সুতরাং, সেখানে আপনার "আমার আসল প্রশ্ন নয়" এর জন্য আমার কারণ আছে ...


1
মনে রাখবেন এটি নেতিবাচক প্রমাণ করা খুব কঠিন hard
লাসে ভি কার্লসেন

5
মজাদার. আপনি কোথায় এই ধরনের একটি regex ব্যবহার করবেন?
চার্লি সল্টস

1
আমি রেকর্ডের জন্য এখানে নোট করব যে উপরের অনেক মন্তব্য এবং এই প্রশ্নের উত্তরগুলি মূলত স্ট্যাকওভারফ্লো / প্রশ্ন / 1845078/… থেকে হয়েছিল যা আমি জিজ্ঞাসা করেছি। মার্ক গ্র্যাভেল এগুলিকে একীভূত করেছে, যা আমি মনে করি যে এই প্রতিক্রিয়াগুলির মধ্যে অনেকগুলি যথাযথ মূল প্রসঙ্গ ব্যতীত উদ্ভট জাতীয় ধরণের করে তোলে, কিছু মন্তব্যে তা বোঝা যায় না। (সম্ভবত সম্ভাব্য ভবিষ্যতের রেপ পয়েন্টগুলিও চুরি করে ফেলেছে)) আমি পরামর্শ দেব যে এই জাতীয় বিশদ প্রেক্ষাপটযুক্ত প্রশ্নগুলি কখনই "নির্ভুল সদৃশ" হতে পারে না। যাই হোক না কেন ...
পিটার হানসেন

2
এই প্রশ্নটি "অ্যাডভান্সড রেজেক্স-ফু" এর অধীনে স্ট্যাক ওভারফ্লো নিয়মিত এক্সপ্রেশনাস এফএকিউতে যুক্ত করা হয়েছে ।
aliteralmind

3
"দ্রষ্টব্য যে এটি নেতিবাচক প্রমাণ করা খুব কঠিন" - এটি এখনও পুরোপুরি এবং স্পষ্টতই মিথ্যা হিসাবে বিশ্বাস করা হয় ... যেমনটি আমরা ইউক্লিডকে প্রমাণ করেছি যে সর্বকালের সবচেয়ে বড় কোনও প্রধানমন্ত্রী নেই। এবং পি এর কোনও প্রমাণ (পি নয়) অবহেলার প্রমাণ। সত্যটি সত্য যে এম্পিরিকাল সর্বজনীন, ধনাত্মক বা নেতিবাচক প্রমাণ করা কঠিন, যেমন, "সমস্ত কাকটি কালো" বা "কোনও রেভেন সাদা নয়"। অ্যালগরিদমগুলি বিশ্লেষণাত্মক, অভিজ্ঞতাগত নয়, সুতরাং এটি বোগাস বিধিটির একটি বিশেষভাবে খারাপ ব্যবহার। উদাহরণস্বরূপ, 'এ' প্যাটার্নটি 'খ' দিয়ে শুরু হওয়া কোনও স্ট্রিংয়ের সাথে মেলে না এমন একটি প্রমাণ "খুব শক্ত" নয়।
জিম বাল্টার

উত্তর:


66

এটি আসলে বেশ সহজ, যদিও এটি বাস্তবায়ন / পতাকা * এর উপর নির্ভর করে :

$a

aস্ট্রিং শেষ হওয়ার পরে একটি চরিত্রের সাথে মিলবে । শুভকামনা।

সতর্কতা:
এই অভিব্যক্তিটি ব্যয়বহুল - এটি সম্পূর্ণ লাইনটি স্ক্যান করবে, শেষ প্রান্তের অ্যাঙ্করটি সন্ধান করবে aএবং তারপরেই এটি খুঁজে পাবে না এবং একটি নেতিবাচক মিল ফিরে পাবে। (আরও বিস্তারিত জানার জন্য নীচে মন্তব্য দেখুন।)


* মূলত আমি মাল্টলাইন-মোড রিজেক্সেপ নিয়ে খুব বেশি চিন্তাভাবনা করি নি, যেখানে $একটি লাইনের শেষের সাথেও মেলে। প্রকৃতপক্ষে, এটি নিউলাইনটির ঠিক আগে খালি স্ট্রিংয়ের সাথে মিলবে , সুতরাং সাধারণ চরিত্রের মতো aআর কখনও দেখা যায় না $


50
এই অভিব্যক্তিটি ব্যয়বহুল - এটি সম্পূর্ণ লাইনটি স্ক্যান করবে, লাইনটির শেষ প্রান্তটি খুঁজে পাবে, এবং কেবল তখনই "এ" খুঁজে না পেয়ে একটি নেতিবাচক মিলটি ফিরে পাবে। আমি দেখতে পাচ্ছি যে ~ 275k লাইন ফাইলটি স্ক্যান করতে 480 মিলিয়ন ডলার লাগবে। কনভার্সটি "এ ^" প্রায় একই সময় নেয়, যদিও এটি আরও কার্যকর বলে মনে হচ্ছে। অন্যদিকে, নেতিবাচক চেহারাতে কোনও কিছু স্ক্যান করার দরকার নেই: "(?! X) x" (এক্স দ্বারা অনুসরণিত কোনও কিছুই এক্স দ্বারা অনুসরণ করা হয় না, অর্থাত্ কিছুই নয়) প্রায় 30 মিমি বা 7% এরও কম সময় নেয়। (
Gnu

1
পার্ল যা বর্তমান মানটির সাথে মিলবে $a। এটি পার্ল সমতুল্যও $(?:a)খুব ধীর perl -Mre=debug -e'$_=a x 50; /$(?:a)/'
ব্র্যাড গিলবার্ট

@arantius, দয়া করে দেখুন সময়জ্ঞান সংক্রান্ত আমার উত্তর , আমি সঠিক বিপরীত সঙ্গে মাপা পাওয়া timeitএবং python3
nivk

এটি অবাক করে দেওয়ার মতো নয় যে ছয় বছর এবং পাইথনের একটি বড় সংস্করণ জিনিসগুলি পরিবর্তন করতে পারে।
অ্যারেটিয়াস

1
পসিক্স বিআরই সিনট্যাক্সে, $aআক্ষরিক পাঠ্যের সাথে মিলবে $a, কারণ $সেই প্যাটার্নে অ্যাঙ্কর হিসাবে অবৈধ।
ফিল্ডস

76

উত্তোলন negative lookahead:

>>> import re
>>> x=r'(?!x)x'
>>> r=re.compile(x)
>>> r.match('')
>>> r.match('x')
>>> r.match('y')

এই আরই শর্তাবলী একটি বৈপরীত্য এবং তাই কোনও কিছুর সাথে মেলে না।

দ্রষ্টব্য:
পাইথনে, পুনরায় ম্যাচ () স্পষ্টতই\A নিয়মিত অভিব্যক্তিটির শুরুতে স্ট্রিং-অফ-স্ট্রিং অ্যাঙ্কর ( ) যুক্ত করে। এই অ্যাঙ্করটি পারফরম্যান্সের জন্য গুরুত্বপূর্ণ: এটি ছাড়া পুরো স্ট্রিংটি স্ক্যান করা হবে। পাইথন ব্যবহার না করে তারা সুস্পষ্টভাবে অ্যাঙ্কর যুক্ত করতে চাইবে:

\A(?!x)x

@ ক্রিস, ইয়েপ - এছাড়াও, (?=x)(?!x)এবং আরও অনেকগুলি (বিপরীত লুকোয়ারের সংক্ষিপ্ত বিবরণ, এবং চেহারাগুলির পিছনে একই) এবং এগুলির মধ্যে অনেকগুলি নির্বিচার মানগুলির জন্যও কাজ করে x(চেহারাটির পিছনে অবশ্যই xনির্দিষ্ট দৈর্ঘ্যের স্ট্রিংগুলির সাথে মেলে)।
অ্যালেক্স মার্টেলি

1
ভাল কাজ প্রদর্শিত হবে। তবে পরিবর্তে শুধু (?!) কি হবে? যেহেতু () সর্বদা মিলবে, তাই কি (?!) কখনও মিলবে না তার গ্যারান্টি দেওয়া হবে না?
পিটার হানসেন

2
@ পিটার, হ্যাঁ, যদি পাইথন সেই বাক্য গঠনটি গ্রহণ করে (এবং সাম্প্রতিক প্রকাশগুলি প্রকাশিত হয়) তবে এটি স্ব-বিরোধীও হতে পারে। আর একটি ধারণা (পুরোপুরি মার্জিত নয়, তবে আপনি যে সমস্ত আগ্রহী ইঞ্জিন জুড়ে কাজ করতে পারেন তার জন্য আরও বেশি ধারণা পাবেন) r'a\bc':, তত্ক্ষণাত উভয় পক্ষের অক্ষর দ্বারা বেষ্টিত একটি শব্দ-সীমার সন্ধান করুন (ভেরিয়েন্ট: অন-ওয়ার্ড অক্ষর অন উভয় পক্ষের).
অ্যালেক্স মার্তেলি

1
মজার বিষয় হল, সরল আক্ষরিক সাথে আমার মূলটি যা আমি জানি "আমার" আমার ইনপুটটিতে পাইথন থেকে দ্রুততম হয় না। একটি 5 এমবি ইনপুট স্ট্রিং সহ, এবং এটি একটি উপ () অপারেশনে ব্যবহার করে, (?! X) x 21% বেশি সময় নেয়, (?! ()) 16%, এবং ($ ^) 6% দীর্ঘ হয়। আমার ক্ষেত্রে না হলেও কিছু ক্ষেত্রে তাৎপর্যপূর্ণ হতে পারে।
পিটার হানসেন 21

2
এটি বেশ ধীর হতে পারে perl -Mre=debug -e'$_=x x 8; /(?!x)x/'। আপনি এটিকে শুরুতে \A(?!x)xবা শেষে অ্যাঙ্কর করে দ্রুত তৈরি করতে পারেন (?!x)x\zperl -Mre=debug -e'$_=x x 8; /(?!x)x\z/; /\A(?!x)x/'
ব্র্যাড গিলবার্ট

43

একটি যে মিস হয়েছিল:

^\b$

এটি মেলতে পারে না কারণ খালি স্ট্রিংয়ে একটি শব্দের সীমানা নেই। পাইথন 2.5 তে পরীক্ষা করা হয়েছে।


7
এটি সেরা উত্তর। এটি লুক হেডগুলি ব্যবহার করে না, কিছু রেগেক্স প্রয়োগের অধীনে ভাঙবে না, একটি নির্দিষ্ট অক্ষর ব্যবহার করবে না (যেমন 'ক'), এবং পুরো স্ক্যান না করে সর্বোচ্চ 3 টি প্রক্রিয়াকরণ পদক্ষেপে ব্যর্থ হয় (রিজেক্স 101.com অনুযায়ী) ইনপুট স্ট্রিং. এটি এক নজরে বোঝাও সহজ।
কিউবিকসফট

1
এটি বাস্তবে কিছু শর্তে ইমাকগুলিতে ব্যর্থ হয় (যদি বাফারের শুরু বা শেষের দিকে ফাঁকা লাইন থাকে) তবে এটি \`\b\'কাজ করে যা "পাঠের শুরু / শেষ" এর জন্য ইমাক্স সিনট্যাক্সটি প্রতিস্থাপন করে ("শুরু / শেষের বিপরীতে" রে").
ফিল্ডস

35

চারপাশে তাকাও:

(?=a)b

রেজেক্স নববিদের জন্য: সামনের ইতিবাচক চেহারাটি (?=a)নিশ্চিত করে তোলে যে পরবর্তী অক্ষরটি রয়েছে a, তবে অনুসন্ধানের স্থানটি পরিবর্তন করে না (বা মিলিত স্ট্রিংয়ের মধ্যে 'এ' অন্তর্ভুক্ত করবে)। এখন যেহেতু পরবর্তী চরিত্রটি নিশ্চিত হয়ে গেছে a, রেজেক্সের অবশিষ্ট অংশটি ( b) কেবলমাত্র পরবর্তী অক্ষর হলে মেলে b। সুতরাং, এই রেজেক্স কেবল তখনই মিলিত হয় যদি কোনও অক্ষর aএবং bএকই সাথে উভয় হয়।


30

a\bc, যেখানে \bশূন্য-প্রস্থের অভিব্যক্তিটি শব্দের সীমাতে মেলে।

এটি কোনও শব্দের মাঝে উপস্থিত হতে পারে না, যা আমরা এটি বাধ্য করি।


যদি আপনার ব্যবহারের ক্ষেত্রে আপনাকে স্ট্রিংটির শুরুতে প্যাটার্নটি অ্যাঙ্কর করতে দেয়, তবে সেই বর্ধনটি aপাঠ্যের কোনও প্রতিবেদনের সন্ধান এবং পরীক্ষা করতে রেজিএক্সএক্স ইঞ্জিনকে আটকাবে ।
ফিল্ডস

20

$.

.^

$.^

(?!)


1
চতুর! আমার অবচেতনতা আমাকে প্রথম তিনটির মতো ধারণা থেকে দূরে সরিয়ে নিয়েছিল, কারণ তারা "অবৈধ" ... ধারণাবাদী, তবে স্পষ্টতই রেজেক্সের কাছে নয়। আমি (!) একটিকে চিনতে পারছি না ... তার উপরে দেখতে হবে।
পিটার হানসেন

1
ঠিক আছে তবে, আমি (?!) উত্তরটি পছন্দ করি ... কার্যকরভাবে অ্যালেক্সের পরামর্শ মতামত দিয়েছেন। নোট যে stackoverflow.com/questions/1723182 (উপরে Amarghosh দ্বারা নির্দিষ্ট) কেউ দাবী Regex এর "কিছু স্বাদে" বিবেচনা করবে একটি বাক্য গঠন ত্রুটি। পাইথন যদিও এটি ভাল। মনে রাখবেন যে আপনার অন্যান্য পরামর্শগুলি পাইথনের পুনরায় ডটল | পুনরায় মাল্টলাইনলাইন মোডের সাথে ব্যর্থ হবে।
পিটার হানসেন 14

1
এটি পরীক্ষা করা হয়েছে? আমি ধরে নিয়েছি যে ^কেবলমাত্র একটি রেজিএক্সএক্সের প্রথম চরিত্র হিসাবে $বিশেষ অর্থ রয়েছে এবং নিয়মিত এক্সপ্রেশনটি যদি একাধিক-রেখা প্রকাশ না করে তবে কেবলমাত্র একটি রেজিএক্সপ্যাকের শেষে বিশেষ অর্থ থাকে।
পিপি

আসলে পার্ল /$./মানে সম্পূর্ণ ভিন্ন কিছু। এর অর্থ $.(ইনপুট লাইন নম্বর) এর বর্তমান মানটি মিলবে । এমনকি /$(.)/যদি আপনি এর use re '/s';আগে লিখে থাকেন তবে কিছু মিলতে পারে । ( perl -E'say "\n" =~ /$(.)/s || 0')
ব্র্যাড গিলবার্ট

POSIX BRE সিনট্যাক্স সালে ^এবং $প্যাটার্ন শুরুতে এবং শেষে (যথাক্রমে) এ শুধুমাত্র বিশেষ, তাই কেউই $.বা .^বা $.^কাজ করবে। (?!)আমি বিশ্বাস করি একটি পার্ল / পিসিআরই বৈশিষ্ট্য।
ফিল্ডগুলি

13

সর্বাধিক মিল

a++a

কমপক্ষে একটি ব্যাকট্র্যাকিং ছাড়াই aযেকোন সংখ্যক এর পরে a। তারপরে আরও একটি মিলানোর চেষ্টা করুন a

বা স্বতন্ত্র সাব এক্সপ্রেশন

এটি a+একটি স্বাধীন সাব এক্সপ্রেশন রাখার সমতুল্য , তার পরে অন্যটি a

(?>a+)a

10

পার্ল ৫.১০ "ক্রিয়াপদ" নামক বিশেষ নিয়ন্ত্রণ শব্দের সমর্থন করে যা (*...)ধারাবাহিকভাবে আবদ্ধ in ( (?...)বিশেষ ক্রমের সাথে তুলনা করুন )) এর মধ্যে এটিতে (*FAIL)ক্রিয়া রয়েছে যা নিয়মিত প্রকাশ থেকে তত্ক্ষণাত্ ফিরে আসে।

নোট করুন ক্রিয়াকলাপগুলি খুব শীঘ্রই পিসিআরইতে প্রয়োগ করা হয়, সুতরাং আপনি সেগুলি পিএইচপি বা অন্যান্য ভাষায় পিসিআরই লাইব্রেরি ব্যবহার করে ব্যবহার করতে পারেন। (তবে আপনি পাইথন বা রুবিতে পারবেন না They তারা নিজের ইঞ্জিন ব্যবহার করেন))


Perldoc.perl.org/perlre.html#%28%2AFAIL%29-%28%2AF%29 এটির জন্য দস্তাবেজগুলি বলছেন "এই প্যাটার্নটি কোনও কিছুর সাথে মেলে না এবং সর্বদা ব্যর্থ হয় It এটি (?!) এর সমান, তবে সহজ পড়ুন। বাস্তবে, (?!) অভ্যন্তরীণভাবে (* FAIL) রূপান্তরিত হয়। " আকর্ষণীয়, হিসাবে (?!) এখন পর্যন্ত আমার প্রিয় "খাঁটি" উত্তর (যদিও এটি জাভাস্ক্রিপ্টে কাজ করে না)। ধন্যবাদ।
পিটার হ্যানসেন

10
\B\b

\bশব্দের সীমানা মেলে - একটি অক্ষর একটি অ-অক্ষর (বা স্ট্রিং সীমানা) এর মধ্যে অবস্থান।
\Bএটির পরিপূরক - এটি দুটি অক্ষরের মধ্যে বা অ-অক্ষরের মধ্যে অবস্থানের সাথে মেলে।

একসাথে তারা কোনও পদের সাথে মেলে না।

আরো দেখুন:


এটি একটি দুর্দান্ত সমাধানের মতো বলে মনে হচ্ছে, যদি তা নির্দিষ্ট বিন্দুতে নোঙ্গর করা থাকে (পাঠ্যের শুরুটি বোধগম্য মনে হয়)। যদি আপনি এটি না করেন তবে এটি একটি ভয়াবহ সমাধান, কারণ পাঠ্যের প্রতিটি অ-শব্দ সীমানা এটি শব্দের সীমানা অনুসরণ করে কিনা তা পরীক্ষা করা হবে! বোধগম্য সংস্করণটি এমন কিছু হবে ^\B\b। যে ভাষাগুলিতে "পাঠ্যের শুরু" এবং "লাইনের শুরু" এর আলাদা সিনট্যাক্স রয়েছে, আপনি "পাঠ্যের শুরু" সিনট্যাক্সটি ব্যবহার করতে চাইবেন, অন্যথায় আপনি প্রতিটি লাইনের পরীক্ষা করে যাবেন। (যেমন \`\B\b"\\`\\B\\b"
ইমাক্সে

এটি বলেছি, আমি এখন উল্লেখ করেছি যে এই প্রশ্নের মূল বক্তব্যটি একটি গোষ্ঠীতে ব্যবহারের জন্য একটি রেজিএক্সপ্যাক্স অর্জন করা, যেখানে ^নির্দিষ্ট রেজএক্সপ্যাক সিনট্যাক্সের ক্ষেত্রে সমস্যাযুক্ত (যেমন পসিক্স বিআরই) যেখানে ^প্রথম অক্ষর যখন কেবল একটি অ্যাঙ্কর থাকে where প্যাটার্নটি এবং অন্যথায় একটি আক্ষরিক ^চরিত্রের সাথে মেলে ।
ফিল্ডস

@ ফিলস - আমি মনে করি আপনি এটিকে ওভারট্রিং করছেন :)- এটি একটি অ-ব্যবহারিক প্রশ্ন, যেখানে লক্ষ্য ছিল একটি আকর্ষণীয় উত্তর - কোনও দক্ষ উত্তর নয়। এটি বলেছিল, প্যাটার্নটি লাইনার টাইমে (লক্ষ্যযুক্ত স্ট্রিংয়ের আকারের সাথে) প্রত্যাখ্যান করা যেতে পারে, সুতরাং এটি কোনও রেজেক্সের পক্ষে খারাপ নয় - বেশিরভাগ প্যাটার্ন এখানে একই এবং ^এটি অপ্টিমাইজড না হলেও লিনিয়ার হতে পারে।
কোবি

পুন: প্রত্যাশা, আমি একটি রেজিএক্সএক্স ইঞ্জিনকে অগ্রাহ্য করতে ইচ্ছুক যা অন্য কোনও অবস্থানে "পাঠ্যের সূচনা" খুঁজে পাওয়ার
আশাবাদী

এছাড়াও, এটি এমন অবৈজ্ঞানিক প্রশ্নোত্তর নয় - আমি এখানে এসে পৌঁছানোর একমাত্র কারণটি দেখতে পেয়েছিল যে কোনও নির্দিষ্ট ইমাস ভেরিয়েবলের কনফিগার করার ব্যবহারিক উদ্দেশ্যে যে আমার নিজের জন্য আরও কার্যকর সমাধান প্রস্তাব করতে পারে যার জন্য একটি রেইগএক্সএক্স মান প্রয়োজন , তবে আমি কার্যকরভাবে অক্ষম করতে চেয়েছিলেন।
ফিল্ডস

8

এটি কাজ করে বলে মনে হচ্ছে:

$.

2
এটি ফার্দিনান্দ বায়ারের উদাহরণের মতো।
গম্বো

9
এবং এটি ডট-ম্যাচস-নিউলাইনস মোডে মিলবে।
টিম পিটজ্যাকার

পার্ল যা প্রকৃতপক্ষে বর্তমান ইনপুট লাইন নম্বরটির সাথে মিলবে $.। সেক্ষেত্রে আপনাকে $(.)আরও সমানভাবে অবলম্বন করতে হবে $(?:.)
ব্র্যাড গিলবার্ট

পসিক্স বিআরই সিনট্যাক্সে, কোনও অক্ষর অনুসারে $.আক্ষরিক সাথে মিলবে $, কারণ $সেই প্যাটার্নে অ্যাঙ্কর হিসাবে অবৈধ।
ফিল্ডস

8

কীভাবে $^বা হতে পারে (?!)


3
একটি রেখার বিরতি মিলিত হবে এই অভিব্যক্তিটির সাথে মোডে যেখানে একটি লাইনের ^শুরু এবং $শেষের সাথে মেলে ।
গম্বো

4
সম্ভবত তিনি বোঝাতে চেয়েছিলেন (?!)- খালি স্ট্রিংয়ের জন্য একটি নেতিবাচক চেহারা। তবে কিছু রেগেক্স স্বাদগুলি এটিকে সিনট্যাক্স ত্রুটি হিসাবেও বিবেচনা করবে।
অ্যালান মুর

1
একটি খালি স্ট্রিং কমপক্ষে জাভাস্ক্রিপ্টে প্রথমটির সাথে মেলে।
রোল্যান্ড পিহলাকাস

পসিক্স বিআরই সিনট্যাক্সে, $^এই আক্ষরিক অক্ষরের সাথে মিলবে, কারণ অক্ষরগুলি অ্যাঙ্কর হিসাবে অবৈধ (যেমন আপনি প্যাটার্নটি ব্যবহার করেছেন তার কারণ এটি যা চান তা না
করায় causes

5

দ্রুততম হবে:

r = re.compile(r'a^')
r.match('whatever')

'এ' কোনও অ-বিশেষ চরিত্র হতে পারে ('x', 'y')। নিওর বাস্তবায়ন কিছুটা খাঁটি হতে পারে তবে 'ক' এর পরিবর্তে আপনি যে চরিত্রটি চয়ন করেন তা দিয়ে শুরু না করা সমস্ত স্ট্রিংয়ের জন্য এটি দ্রুত হবে কারণ এই ক্ষেত্রে দ্বিতীয়টির পরিবর্তে এটি প্রথম চরিত্রের পরে মেলে না।


প্রকৃতপক্ষে, (। ^) আমার ক্ষেত্রে (\ x00 ^) থেকে প্রায় 10% ধীর হবে।
পিটার হানসেন

1
আমি এটি গ্রহণ করছি, যেহেতু \ n ব্যতীত অন্য যে কোনও মান ব্যবহার করা চরিত্রের সাথে কখনও মিলবে না তার গ্যারান্টিযুক্ত এবং আমি এটিকে (? X) x বিকল্পের তুলনায় কিছুটা বেশি পঠনযোগ্য (তুলনামূলকভাবে কম লোক রিজেক্স বিশেষজ্ঞ হিসাবে দেখছি) হিসাবে দেখছি যদিও আমি সেটিকেও ভোট দিয়েছি। আমার ক্ষেত্রে, উভয় বিকল্পের জন্য আমার এটির ব্যাখ্যা দেওয়ার জন্য একটি মন্তব্যের প্রয়োজন হবে, তাই আমি মনে করি আমি কেবল আমার মূল প্রয়াসটি '\ x00NEVERMATCHES ^' এ সামঞ্জস্য করব। আমি আমার আসল স্ব-ডকুমেন্টিং-নেস সহ এই উত্তরের কোনও ম্যাচের গ্যারান্টি পেয়েছি। উত্তরের জন্য সবাইকে ধন্যবাদ!
পিটার হ্যানসেন

3
এটি কি আসলে কাজ করে এবং যদি তাই হয় তবে কে ইউনিক্সের সাথে ব্রেক করার সিদ্ধান্ত নিয়েছে? ইউনিক্স রেগেক্সপসে ^কেবল প্রথম চরিত্র হিসাবে এবং একইভাবে বিশেষ $। যে কোনও ইউনিক্স সরঞ্জামের সাথে, সেই রেজিএক্সপ্যাক্স আক্ষরিক স্ট্রিং সম্বলিত কোনও কিছুর সাথে মিলবে a^
জাককোক

হেই, এটা খুব ভাল আক্রমণ। আমি কখনই সেই আক্ষরিক স্ট্রিংয়ের বিরুদ্ধে পরীক্ষা করিনি।
অ্যাডাম নেলসন

ওহ যদি এটি ইউনিক্সকে পুনরায় ভেঙে ফেলে তবে আপনি পছন্দ করবেন >^
কিউবিকসফট

4

পাইথন এটি গ্রহণ করবে না, তবে পার্ল তা করবে:

perl -ne 'print if /(w\1w)/'

এই রেজেক্সের (তাত্ত্বিকভাবে) অসীম (এমনকি) সংখ্যার সাথে মিলের চেষ্টা করা উচিত w, কারণ প্রথম গোষ্ঠী ( ()গুলি) নিজের মধ্যে পুনরাবৃত্তি করে। পার্ল এমনকি কোনও সতর্কতা জারি করছে বলে মনে হয় না, এমনকি এটিরও কম use strict; use warnings;, তাই আমি ধরে নিলাম এটি কমপক্ষে বৈধ, এবং আমার (ন্যূনতম) পরীক্ষাটি কোনও কিছুর সাথে মেলে না, তাই আমি আপনার সমালোচনার জন্য এটি জমা দেব।


1
থিওরি সর্বদা দুর্দান্ত, তবে অনুশীলনে আমি মনে করি যে আমি নিয়মিত প্রকাশের জন্য উদ্বিগ্ন হব যার বর্ণনায় "অসীম" শব্দটি অন্তর্ভুক্ত ছিল!
পিটার হানসেন

perl -Mre=debug -e'"www wwww wwwww wwwwww" =~ /(w\1w)/'
ব্র্যাড গিলবার্ট

@ ব্র্যাডগিলবার্ট - ওপির অনুরোধ অনুসারে এখানে (5.10, কিছুটা পুরানো) উত্পাদন "রেজেক্স ব্যর্থ" হয়েছে। এটি কি আপনার সিস্টেমে মেলে?
ক্রিস লুটজ

4

[^\d\D]বা (?=a)bবা a$aবাa^a


ধন্যবাদ। উল্লেখ্য যে উপরে বর্ণিত প্রথম উত্তরটি (?! X) x ছিল।
পিটার হানসেন

হ্যাঁ, মনে হয়েছিল আমি অন্যান্য উত্তরদাতাদের খুব দ্রুত স্ক্যান করেছি।
বার্ট কায়ার্স

4

এটি পাইথন এবং অন্যান্য অনেক ভাষার জন্য কাজ করবে না, তবে জাভাস্ক্রিপ্ট রিজেক্সে, []একটি বৈধ চরিত্রের শ্রেণি যা মিলে যায় না। সুতরাং ইনপুট যাই হোক না কেন, নিম্নলিখিতগুলি অবিলম্বে ব্যর্থ হওয়া উচিত:

var noMatch = /^[]/;

আমার কাছে এটির চেয়ে ভাল আমার পছন্দ /$a/, এটি স্পষ্টভাবে তার উদ্দেশ্যটি যোগাযোগ করে। এবং যখন আপনার কখন এটির প্রয়োজন হবে, ততক্ষণ আমার এটি দরকার কারণ ব্যবহারকারীর ইনপুটের ভিত্তিতে গতিশীল সংকলিত প্যাটার্নের জন্য আমার ফ্যালব্যাকের প্রয়োজন ছিল। যখন প্যাটার্নটি অবৈধ হয়, তখন আমাকে এটিকে এমন একটি প্যাটার্ন দিয়ে প্রতিস্থাপন করতে হবে যা কিছুই মিলবে না matches সরলীকৃত, এটি দেখতে এরকম দেখাচ্ছে:

try {
    var matchPattern = new RegExp(someUserInput);
}
catch (e) {
    matchPattern = noMatch;
}

4

সীমানা ম্যাচারের সাথে জড়িত সমস্ত উদাহরণ একই রেসিপিটি অনুসরণ করে। ম্যারাডোনা:

  1. যে কোনও সীমানা ম্যাথচার নিন: ^, $, \ বি, \ এ, \ জেড, \ z

  2. তারা যা বোঝায় তার বিপরীতে কর Do

উদাহরণ:

^ এবং \ এ শুরুতে বোঝানো হয় তাই এগুলি শুরুতে ব্যবহার করবেন না

^ --> .^
\A --> .\A

\ b একটি শব্দের সীমানার সাথে মেলে তাই এটির মাঝে ব্যবহার করুন

\b --> .\b.

$, \ Z এবং \ z শেষের জন্য বোঝানো হয়েছে তাই শেষ পর্যন্ত এগুলি ব্যবহার করবেন না

$ --> $.
\Z --> \Z.
\z --> \z.

অন্যেরা লুকোহেড এবং লুকের পিছনে ব্যবহারের সাথে জড়িত যা একই ধরণের সাথেও কাজ করে: আপনি যদি ইতিবাচক বা নেতিবাচক চেহারা দেন তবে তারপরে বিপরীত কিছু হয়

(?=x)[^x]
(?!x)x

যদি আপনি বিপরীত কিছু অনুসরণ করে ধনাত্মক বা নেতিবাচক চেহারা দেন

[^x](?<=x)
x(?<!x)

এগুলি আরও ধরণের ধরণ এবং আরও এ জাতীয় উপমা হতে পারে।


3

এত ভাল উত্তর!

@ নিভকের উত্তরের অনুরূপ, আমি পার্লের সাথে কখনও মিলছে না এমন রেইগেক্সের বিভিন্ন বৈকল্পিকের জন্য পারফরম্যান্স তুলনা ভাগ করতে চাই।

  1. ইনপুট: সিউডো-এলোমেলো আসকি স্ট্রিং (25,000 বিভিন্ন লাইন, দৈর্ঘ্য 8-16):

রেজেক্স গতি:

Total for   \A(?!x)x: 69.675450 s, 1435225 lines/s
Total for       a\bc: 71.164469 s, 1405195 lines/s
Total for    (?>a+)a: 71.218324 s, 1404133 lines/s
Total for       a++a: 71.331362 s, 1401907 lines/s
Total for         $a: 72.567302 s, 1378031 lines/s
Total for     (?=a)b: 72.842308 s, 1372828 lines/s
Total for     (?!x)x: 72.948911 s, 1370822 lines/s
Total for       ^\b$: 79.417197 s, 1259173 lines/s
Total for         $.: 88.727839 s, 1127041 lines/s
Total for       (?!): 111.272815 s, 898692 lines/s
Total for         .^: 115.298849 s, 867311 lines/s
Total for    (*FAIL): 350.409864 s, 285380 lines/s
  1. ইনপুট: / ইউএসআর / শেয়ার / ডিক / শব্দ (100,000 ইংরেজি শব্দ)।

রেজেক্স গতি:

Total for   \A(?!x)x: 128.336729 s, 1564805 lines/s
Total for     (?!x)x: 132.138544 s, 1519783 lines/s
Total for       a++a: 133.144501 s, 1508301 lines/s
Total for    (?>a+)a: 133.394062 s, 1505479 lines/s
Total for       a\bc: 134.643127 s, 1491513 lines/s
Total for     (?=a)b: 137.877110 s, 1456528 lines/s
Total for         $a: 152.215523 s, 1319326 lines/s
Total for       ^\b$: 153.727954 s, 1306346 lines/s
Total for         $.: 170.780654 s, 1175906 lines/s
Total for       (?!): 209.800379 s, 957205 lines/s
Total for         .^: 217.943800 s, 921439 lines/s
Total for    (*FAIL): 661.598302 s, 303540 lines/s

(ইনটেল i5-3320M তে উবুন্টু, লিনাক্স কার্নেল 4.13, পার্ল 5.26)


এখানে জাভাস্ক্রিপ্টের কয়েকটি পদ্ধতির তুলনা করা হয়েছে: jsperf.com/regex-that-never-matches
thdan

2

আমি বিশ্বাস করি যে

\Z RE FAILS! \A

এমনকি নিয়মিত প্রকাশে মাল্টলাইন, ডটল ইত্যাদির মতো পতাকাও অন্তর্ভুক্ত রয়েছে এমন ক্ষেত্রে অন্তর্ভুক্ত covers

>>> import re
>>> x=re.compile(r"\Z RE FAILS! \A")
>>> x.match('')
>>> x.match(' RE FAILS! ')
>>>

আমি বিশ্বাস করি (তবে আমি এটি বেঞ্চমার্ক করে নেই) যে স্ট্রিংয়ের দৈর্ঘ্য (> 0) এর মধ্যে \Zএবং \Aসময় ব্যর্থতা স্থির থাকা উচিত constant


2
(*FAIL)

অথবা

(*F)

পিসিআরই এবং পার্ল দিয়ে আপনি এই ব্যাকট্র্যাকিং নিয়ন্ত্রণ ক্রিয়াটি ব্যবহার করতে পারেন যা নিদর্শনটিকে তাত্ক্ষণিকভাবে ব্যর্থ করতে বাধ্য করে।


2

এই দুর্দান্ত উত্তরগুলির কয়েকটি দেখার পরে, বর্তমানে গৃহীত উত্তরের সম্পর্কে @ অ্যারেন্টিয়াসের মন্তব্য (টাইমিং $xবনাম x^বনাম সম্পর্কিত (?!x)x) আমাকে এখনও অবধি প্রদত্ত কয়েকটি সমাধানের সময় দিতে চাইছে।

@ আরান্টিয়াসের 275 কে লাইন স্ট্যান্ডার্ডটি ব্যবহার করে আমি পাইথনে নিম্নলিখিত পরীক্ষাগুলি চালিয়েছি (v3.5.2, আইপিথন 6.2.1) ran

টিএল; ডিআর: 'x^'এবং 'x\by'কমপক্ষে ~ 16 এর একটি ফ্যাক্টর দ্বারা দ্রুততম এবং @ অ্যারেন্টিয়াসের সন্ধানের বিপরীতে, (?!x)xসবচেয়ে ধীর (~ 37 গুণ ধীর) ছিল er সুতরাং গতি প্রশ্ন অবশ্যই বাস্তবায়ন নির্ভর। গতি আপনার জন্য গুরুত্বপূর্ণ যদি প্রতিশ্রুতি দেওয়ার আগে এটি আপনার নিজের উদ্দেশ্যে করা সিস্টেমে পরীক্ষা করুন।

আপডেট: সময় 'x^'এবং সময় মধ্যে স্পষ্টতই একটি বৃহত তফাত আছে 'a^'। দয়া করে আরও তথ্যের জন্য এই প্রশ্নটি এবং এর aপরিবর্তে ধীর সময়ের জন্য পূর্ববর্তী সম্পাদনাটি দেখুন x

In [1]: import re

In [2]: with open('/tmp/longfile.txt') as f:
   ...:     longfile = f.read()
   ...:     

In [3]: len(re.findall('\n',longfile))
Out[3]: 275000

In [4]: len(longfile)
Out[4]: 24733175

In [5]: for regex in ('x^','.^','$x','$.','$x^','$.^','$^','(?!x)x','(?!)','(?=x)y','(?=x)(?!x)',r'x\by',r'x\bx',r'^\b$'
    ...: ,r'\B\b',r'\ZNEVERMATCH\A',r'\Z\A'):
    ...:     print('-'*72)
    ...:     print(regex)
    ...:     %timeit re.search(regex,longfile)
    ...:     
------------------------------------------------------------------------
x^
6.98 ms ± 58.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
------------------------------------------------------------------------
.^
155 ms ± 960 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
------------------------------------------------------------------------
$x
111 ms ± 2.12 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
------------------------------------------------------------------------
$.
111 ms ± 1.76 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
------------------------------------------------------------------------
$x^
112 ms ± 1.14 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
------------------------------------------------------------------------
$.^
113 ms ± 1.44 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
------------------------------------------------------------------------
$^
111 ms ± 839 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
------------------------------------------------------------------------
(?!x)x
257 ms ± 5.03 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
------------------------------------------------------------------------
(?!)
203 ms ± 1.56 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
------------------------------------------------------------------------
(?=x)y
204 ms ± 4.84 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
------------------------------------------------------------------------
(?=x)(?!x)
210 ms ± 1.66 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
------------------------------------------------------------------------
x\by
7.41 ms ± 122 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
------------------------------------------------------------------------
x\bx
7.42 ms ± 110 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
------------------------------------------------------------------------
^\b$
108 ms ± 1.05 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
------------------------------------------------------------------------
\B\b
387 ms ± 5.77 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
------------------------------------------------------------------------
\ZNEVERMATCH\A
112 ms ± 1.52 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
------------------------------------------------------------------------
\Z\A
112 ms ± 1.38 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

প্রথম যখন আমি এটি rচালালাম , আমি সর্বশেষ 3 টি এক্সপ্রেশনগুলি ভুলে গিয়েছিলাম , তাই ব্যাকস্পেসের চরিত্র '\b'হিসাবে ব্যাখ্যা করা হয়েছিল '\x08'। যাইহোক, আমার অবাক করে দিয়েছি, 'a\x08c'পূর্বের দ্রুততম ফলাফলের চেয়ে দ্রুত ছিল! মোট কথা, এটি এখনও সেই লেখার সাথে মিলবে তবে আমি ভেবেছিলাম এটি এখনও লক্ষণীয় কারণ কারণ এটি দ্রুত কেন জানি না।

In [6]: for regex in ('x\by','x\bx','^\b$','\B\b'):
    ...:     print('-'*72)
    ...:     print(regex, repr(regex))
    ...:     %timeit re.search(regex,longfile)
    ...:     print(re.search(regex,longfile))
    ...:     
------------------------------------------------------------------------
y 'x\x08y'
5.32 ms ± 46.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
None
------------------------------------------------------------------------
x 'x\x08x'
5.34 ms ± 66.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
None
------------------------------------------------------------------------
$ '^\x08$'
122 ms ± 1.05 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
None
------------------------------------------------------------------------
\ '\\B\x08'
300 ms ± 4.11 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
None

আমার পরীক্ষার ফাইলটি "... পাঠযোগ্য পাঠ্য বিষয়বস্তু এবং কোনও সদৃশ লাইন নেই" (উবুন্টু 16.04 এ) জন্য একটি সূত্র ব্যবহার করে তৈরি করা হয়েছিল :

$ ruby -e 'a=STDIN.readlines;275000.times do;b=[];rand(20).times do; b << a[rand(a.size)].chomp end; puts b.join(" "); end' < /usr/share/dict/words > /tmp/longfile.txt

$ head -n5 /tmp/longfile.txt 
unavailable speedometer's garbling Zambia subcontracted fullbacks Belmont mantra's
pizzicatos carotids bitch Hernandez renovate leopard Knuth coarsen
Ramada flu occupies drippings peaces siroccos Bartók upside twiggier configurable perpetuates tapering pint paralyzed
vibraphone stoppered weirdest dispute clergy's getup perusal fork
nighties resurgence chafe

\B\bভয়াবহভাবে ত্রুটিযুক্ত কর্মক্ষমতা-ভিত্তিক (প্রতিটি প্যাটার্ন যেমন কোনও পজিশনে নোঙ্গর দেওয়া হয় না, তবে এই প্যাটার্নটি বিশেষত খারাপ)। ^\B\bপরিবর্তে বেঞ্চমার্কিং চেষ্টা করুন ।
ফিল্ডস

2

খালি রেগেক্স

কোনও কিছুর সাথে কখনও মিলবে না তার সেরা রেজেকেক্স হ'ল একটি খালি রেজেক্স। তবে আমি নিশ্চিত নই যে সমস্ত রেজেক্স ইঞ্জিন এটি গ্রহণ করবে।

অসম্ভব রেজেক্স

অন্য সমাধানটি হ'ল একটি অসম্ভব রেজেেক্স তৈরি করা। আমি দেখতে পেয়েছি যে $-^আপনার পাঠ্যের আকার নির্বিশেষে কেবল দুটি পদক্ষেপ গ্রহণ করে ( https://regex101.com/r/yjcs1Z/1 )।

রেফারেন্সের জন্য:

  • $^এবং $.গণনা করতে 36 পদক্ষেপ গ্রহণ করুন -> ও (1)
  • \b\B আমার নমুনায় 1507 পদক্ষেপ নেয় এবং আপনার স্ট্রিংয়ে অক্ষরের সংখ্যা বৃদ্ধি করে -> ও (এন)

এই প্রশ্ন সম্পর্কে আরও জনপ্রিয় থ্রেড:


1

হয়তো এই?

/$.+^/

পাইথনে, এই পদ্ধতিটি কেবলমাত্র ফ্ল্যাগগুলি নিয়ন্ত্রণ করলেই কাজ করে : re.compile('$.+^', re.MULTILINE|re.DOTALL).search('a\nb\nc\n')খ এবং সি (এবং সমস্ত সংলগ্ন এবং ইন-এর মধ্যে নিউলাইনস) এর সাথে সম্পর্কিত কোনও ম্যাচ অবজেক্ট দেয়। নেতিবাচক দৃষ্টিভঙ্গি পদ্ধতির আমি প্রস্তাবিত নেতিবাচক দৃষ্টিভঙ্গি যে কোনও পতাকা সংমিশ্রণ করতে পারে তার জন্য (যেমন, কোনও কিছুর সাথে মেলে না)।
অ্যালেক্স মার্টেলি

আমার খারাপ - মিশ্রিত $এবং ^
ক্রিস লুটজ

1
এটি শুরুর আগে একটি স্ট্রিংয়ের শেষ সন্ধানের চেষ্টা হতে পারে তবে আমি খুঁজে পেয়েছি যে রেজেক্সের শেষ চরিত্র না হলে string এর অর্থ 'স্ট্রিংয়ের সমাপ্তি' নয়, এবং আমি প্রত্যাশা করি একটি অনুরূপ আচরণ প্রযোজ্য to ^, সুতরাং এটি আক্ষরিক with দিয়ে শুরু হওয়া এবং একটি আক্ষরিক সাথে শেষ হতে পারে এমন একটি স্ট্রিংয়ের সাথে মেলে
p

@ পেভিয়াম, এটি অবশ্যই পাইথন বা জাভাস্ক্রিপ্টে সেভাবে আচরণ করে না। আপনি যদি এগুলি escape দিয়ে পালাতে বা এগুলিকে [] সহ একটি চরিত্রে সেট করা না থাকে তবে $ এবং like এর মতো বিশেষ অক্ষরগুলিকে আক্ষরিক হিসাবে বিবেচনা করা উচিত নয়। আপনি কোন ভাষায় এটি পালন করেছেন?
পিটার হানসেন 21

পার্লে, কমপক্ষে, এটি লিখিত হওয়া উচিত /\z.+\A/( পার্ল্ডোক পার্লারে দেখুন ) যা মাল্টি-লাইন এবং একক-লাইন মোডকে ( use re '/ms') এটি প্রভাবিত হতে বাধা দেয়।
ব্র্যাড গিলবার্ট

0
'[^0-9a-zA-Z...]*'

এবং প্রতিস্থাপন করুন ... সমস্ত মুদ্রণযোগ্য প্রতীক সহ)। এটি একটি পাঠ্য ফাইলের জন্য।


আমি মনে করি এর জন্য আরও একটি ছোট উপায় থাকতে হবে, তবে এটি আমার প্রথম চিন্তাও ছিল ^^
এফপি

4
এটি খালি স্ট্রিংয়ের সাথে মিলবে। প্রতিটি সম্ভাব্য চরিত্র ধরার [^\x00-\xFF]+জন্য (বাইট-ভিত্তিক বাস্তবায়নের জন্য) ব্যবহার করুন।
ফার্ডিনান্দ বায়ার

6
একটি ভাল অভিব্যক্তি হবে [^\s\S]। তবে ফার্দিনান্দ বায়ার যেমন ইতিমধ্যে বলেছিলেন, এটি একটি খালি স্ট্রিংয়ের সাথে মিলবে।
গম্বো

3
ড্রাকোশার রেজেেক্স একটি খালি স্ট্রিংয়ের সাথে মিল করতে পারে *; এটিকে ছেড়ে দিন বা এর সাথে প্রতিস্থাপন করুন +এবং এটি কমপক্ষে একটি চরিত্রের সাথে মেলে। বর্গ যদি সমস্ত সম্ভাব্য অক্ষর বাদ দেয় তবে এটি কোনও কিছুর সাথে মেলে না।
অ্যালান মুর

0

রেগেক্সের পরিবর্তে কী হবে, বিবৃতি যদি সর্বদা মিথ্যা ব্যবহার করে? জাভাস্ক্রিপ্টে:

var willAlwaysFalse=false;
if(willAlwaysFalse)
{
}
else
{
}

আমি চার্লির প্রশ্নের উত্তরে একটি মন্তব্য যুক্ত করেছি, কেন এই ধরণের পদ্ধতির পছন্দসই নয় তা ব্যাখ্যা করে। সংক্ষেপে, আমার একটি রেজেক্সের অভ্যন্তরে একটি গ্রুপ দরকার যা সর্বদা ব্যবহৃত হবে, তবে কিছু ক্ষেত্রে এই দলটি কখনও মিলতে না পারে তা নিশ্চিত করার জন্য এটি অবশ্যই তৈরি করা উচিত।
পিটার হানসেন

-2

একটি পোর্টেবল সমাধান যা রিজ এক্সপ্যাক বাস্তবায়নের উপর নির্ভর করে না কেবলমাত্র একটি ধ্রুব স্ট্রিং ব্যবহার করা যা আপনি নিশ্চিত যে লগ বার্তায় কখনই উপস্থিত হবে না। উদাহরণস্বরূপ নিম্নলিখিতগুলির উপর ভিত্তি করে একটি স্ট্রিং তৈরি করুন:

cat /dev/urandom | hexdump | head -20
0000000 5d5d 3607 40d8 d7ab ce72 aae1 4eb3 ae47
0000010 c5e2 b9e8 910d a2d9 2eb3 fdff 6301 c85f
0000020 35d4 c282 e439 33d8 1c73 ca78 1e4d a569
0000030 8aca eb3c cbe4 aff7 d079 ca38 8831 15a5
0000040 818b 323f 0b02 caec f17f 387b 3995 88da
0000050 7b02 c80b 2d42 8087 9758 f56f b71f 0053
0000060 1501 35c9 0965 2c6e 03fe 7c6d f0ca e547
0000070 aba0 d5b6 c1d9 9bb2 fcd1 5ec7 ee9d 9963
0000080 6f0a 2c91 39c2 3587 c060 faa7 4ea4 1efd
0000090 6738 1a4c 3037 ed28 f62f 20fa 3d57 3cc0
00000a0 34f0 4bc2 3067 a1f7 9a87 086b 2876 1072
00000b0 d9e1 6b8f 5432 a60e f0f5 00b5 d9ef ed6f
00000c0 4a85 70ee 5ec4 a378 7786 927f f126 2ec2
00000d0 18c5 46fe b167 1ae6 c87c 1497 48c9 3c09
00000e0 8d09 e945 13ce 7da2 08af 1a96 c24c c022
00000f0 b051 98b3 2bf5 4d7d 5ec4 e016 a50d 355b
0000100 0e89 d9dd b153 9f0e 9a42 a51f 2d46 2435
0000110 ef35 17c2 d2aa 3cc7 e2c3 e711 d229 f108
0000120 324e 5d6a 650a d151 bc55 963f 41d3 66ee
0000130 1d8c 1fb1 1137 29b2 abf7 3af7 51fe 3cf4

অবশ্যই, এটি কোনও বৌদ্ধিক চ্যালেঞ্জ নয়, তবে ড্যাক্ট টেপ প্রোগ্রামিংয়ের মতো আরও ।


-6
new Regex(Guid.NewGuid().ToString())

কেবলমাত্র আলফানিউমারিকস এবং ' -' (যার মধ্যে কোনওটিই রেজেক্স বিশেষ অক্ষর নয়) সমন্বিত একটি প্যাটার্ন তৈরি করে তবে একই স্ট্রিংয়ের আগে কোথাও উপস্থিত হওয়া পরিসংখ্যানগতভাবে অসম্ভব (কারণ এটি একটি জিইউইডিটির পুরো বিষয়))


2
"পরিসংখ্যানগতভাবে অসম্ভব"? তাই না? জিইউইডি কীভাবে গণনা করা হয়েছে তার উপর নির্ভর করে পরবর্তী জিইউইডিগুলি (যেমন তারা মেশিনটি তাদের এবং সময় নির্ধারণের উপর নির্ভর করে) হিসাবে ভবিষ্যদ্বাণী করা সম্ভব এবং প্রায়শই সহজ। আপনার অর্থ "অসম্ভব", "খুব ছোট সম্ভাবনা সহ", তবে আপনি পুরোপুরি এলোমেলো স্ট্রিংয়ের জন্যও "অসম্ভব" বলতে পারবেন না। আপনার রেজেক্স অসীম সংখ্যক স্ট্রিংয়ের সাথে মিলবে - এই প্রশ্নটি এমন কোনও সন্ধান করছে যা কোনও কিছুর সাথে মেলে না। কখনো।
ফার্ডিনান্ড বায়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.