রেজেক্স কেবল সম্পূর্ণ শব্দের সাথে মেলে


90

আমার একটি রেজেক্স এক্সপ্রেশন রয়েছে যা আমি প্রদত্ত সামগ্রীতে একটি শব্দ, সংবেদনশীল, যা একটি ডাটাবেসে সজ্জিত শব্দকোষে থাকা সমস্ত শব্দ খুঁজে পেতে ব্যবহার করছি। আমার প্যাটার্নটি এখানে:

/($word)/i

সমস্যাটি হ'ল, যদি আমি ব্যবহার করি /(Foo)/iতবে শব্দগুলি Foodমিলবে। শব্দের উভয়দিকে শ্বেতস্থান বা শব্দের সীমা থাকতে হবে।

আমি Fooযখন বাক্যটির শুরুতে, মাঝখানে বা শেষে কোনও শব্দ হয় কেবল তখনই কেবল তার শব্দের সাথে মেলে আমার ভাবটি কীভাবে পরিবর্তন করতে পারি ?

উত্তর:


120

শব্দ সীমানা ব্যবহার করুন:

/\b($word)\b/i

বা যদি আপনি সিনান আঞ্জরের উদাহরণের মতো "স্পিকার" অনুসন্ধান করছেন:

/(?:\W|^)(\Q$word\E)(?:\W|$)/i

4
আপনি পোস্ট করার সময় আমি এই উত্তরটির লম্বা হাতের সংস্করণটি টাইপ করছিলাম। :)
জ্যাম্বিশিপ

@ রিচার্ডসিমোস \b(<|>=)\bমেলে না>=
আলহালাল

@RichardSimoes এবং \b[-|+][0-9]+\bম্যাচ +10মধ্যে 43E+10। দুটোই আমি চাই না।
আলহেলাল

আমি যদি এমন কোনও শব্দ অনুসন্ধান করতে চাই যা যুক্ত হয় না বা অন্য কোনও শব্দের মধ্যে নেই। তাহলে এই যুক্তিটি কাজ করবে না
প্রসন্ন সাসনে

কেউ কীভাবে গাণিতিক তুলনা অপারেটরগুলি> = এবং <= পাবেন?
আন্তনস্যাক

50

যে কোনও পুরো শব্দের সাথে মেলে আপনি প্যাটার্নটি ব্যবহার করবেন (\w+)

ধরে নিই আপনি পিসিআরই বা তেমন কিছু ব্যবহার করছেন:

এখানে চিত্র বর্ণনা লিখুন

এই লাইভ উদাহরণ থেকে নেওয়া উপরের স্ক্রিনশট: http://regex101.com/r/cU5lC2

কমান্ডলাইনে কোনও সম্পূর্ণ শব্দের সাথে মিল (\w+)

আমি ব্যবহার করছি phpsh ইন্টারেক্টিভ শেল উপর উবুন্টু 12.10 প্রকট PCRE Regex ইঞ্জিন পদ্ধতি নামে পরিচিত মাধ্যমে preg_match

পিএইচপিএস শুরু করুন, কিছু কন্টেন্টকে ভেরিয়েবলে রেখে শব্দের সাথে মিল দিন।

el@apollo:~/foo$ phpsh

php> $content1 = 'badger'
php> $content2 = '1234'
php> $content3 = '$%^&'

php> echo preg_match('(\w+)', $content1);
1

php> echo preg_match('(\w+)', $content2);
1

php> echo preg_match('(\w+)', $content3);
0

প্রিগ_ম্যাচ পদ্ধতিটি ভেরিয়েবলগুলি বিশ্লেষণ করতে $content1, $content2এবং প্যাটার্ন $content3সহ পিএইচপি ভাষার মধ্যে পিসিআরই ইঞ্জিন ব্যবহার করে (\w)+

$ বিষয়বস্তু 1 এবং $ বিষয়বস্তু 2 তে কমপক্ষে একটি শব্দ থাকে, $ সামগ্রী 3 থাকে না।

কমান্ডলাইনে অনেকগুলি আক্ষরিক শব্দের সাথে মেলে (dart|fart)

el@apollo:~/foo$ phpsh

php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'farty gun';
php> $gun4 = 'unicorn gun';

php> echo preg_match('(dart|fart)', $gun1);
1

php> echo preg_match('(dart|fart)', $gun2);
1

php> echo preg_match('(dart|fart)', $gun3);
1

php> echo preg_match('(dart|fart)', $gun4);
0

ভ্যারিয়েবল বন্দুক 1 এবং গান 2 এ স্ট্রিং ডার্ট বা ফার্ট থাকে। বন্দুক 4 না। তবে এটি শব্দের সাথে fartমেলে এমন সমস্যা হতে পারে farty। এটি ঠিক করতে, রেজিজেমে শব্দের সীমানা প্রয়োগ করুন।

শব্দের সীমানার সাথে কমান্ডলাইনে আক্ষরিক শব্দগুলি মিলান।

el@apollo:~/foo$ phpsh

php> $gun1 = 'dart gun';
php> $gun2 = 'fart gun';
php> $gun3 = 'farty gun';
php> $gun4 = 'unicorn gun';

php> echo preg_match('(\bdart\b|\bfart\b)', $gun1);
1

php> echo preg_match('(\bdart\b|\bfart\b)', $gun2);
1

php> echo preg_match('(\bdart\b|\bfart\b)', $gun3);
0

php> echo preg_match('(\bdart\b|\bfart\b)', $gun4);
0

সুতরাং এটি ছাড়া যে শব্দ পূর্ববর্তী উদাহরণ হিসাবে একই fartএকটি সঙ্গে \bশব্দ সীমানা বিষয়বস্তুতে বিদ্যমান নয়: farty


am, pm শব্দ না?
মিনিওন

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

8

ব্যবহার করলে \bঅবাক করা ফলাফল পাওয়া যায়। কোনও শব্দের সংজ্ঞা থেকে কী আলাদা করে তা আবিষ্কার করা এবং সেই তথ্যটি আপনার প্যাটার্নে অন্তর্ভুক্ত করে নেওয়া ভাল would

#!/usr/bin/perl

use strict; use warnings;

use re 'debug';

my $str = 'S.P.E.C.T.R.E. (Special Executive for Counter-intelligence,
Terrorism, Revenge and Extortion) is a fictional global terrorist
organisation';

my $word = 'S.P.E.C.T.R.E.';

if ( $str =~ /\b(\Q$word\E)\b/ ) {
    print $1, "\n";
}

আউটপুট:

সংকলন রেক্স "\ বি (এস \ .পি \। ই \ .সি \। টি \ .আর \। ই \।) \ বি"
চূড়ান্ত প্রোগ্রাম:
   1: বাউন্ড (2)
   2: ওপেন 1 (4)
   4: সঠিক (9)
   9: ক্লোজ 1 (11)
  11: বাউন্ড (12)
  12: শেষ (0)
0 এ "স্পিকার" নোঙ্গর করা (অ্যাঙ্করড পরীক্ষা করা) স্টক্লাস বাউন্ড মিনিট 14
আরএক্স "\ বি (এস \ .পি \। ই \ .সি \ .T \ .আর \। ই \।) \ বি" এসপির বিরুদ্ধে sv বি "র জন্য ম্যাচ শুরুর অনুমান
.ECTRE (কাউন্টার-ইন্টেলিজেন্সের জন্য বিশেষ কার্যনির্বাহী, "...
অফসেটে অ্যাঙ্করড সাবস্ট্রার "স্পেকটার" পাওয়া গেছে ...
শুরুর_পরিচালনা: 0 চেক_আট: 0 এস: 0 এন্ডপোজ: 1
STCLASS এর বিরোধিতা করে না ...
অনুমান করা হয়েছে: অফসেট 0 এ ম্যাচ
আরএক্সের সাথে "Exec বি (এস \ .P \ .E \ .C \ .T \ .R \ .E \।) \ বি" স্পেকটারের বিপরীতে (বিশেষ নির্বাহী)
কাউন্টার-বুদ্ধি, "...
   0 | 1: বাউন্ড (2)
   0 | 2: ওপেন 1 (4)
   0 | 4: সঠিক (9)
  14 | 9: ক্লোজ 1 (11)
  14 | 11: বাউন্ড (12)
                                  ব্যর্থ...
ম্যাচ ব্যর্থ হয়েছে
নিখরচায় রেক্স: "\ বি (এস P .পি \। ই \ .সি \। টি \ .আর \। ই \।) \ বি"

4
আমি মনে করি একটি শব্দ সাধারণত একটি \ w শব্দ হবে তবে আকর্ষণীয় বিন্দু।
রিচার্ড সিমিস

1

শব্দ সীমানা ব্যবহার করুন \ বি,

নিম্নলিখিত (চার পলায়ন ব্যবহার করে) আমার পরিবেশে কাজ করে: ম্যাক, সাফারি সংস্করণ 10.0.3 (12602.4.8)

var myReg = new RegExp(‘\\\\b’+ variable + ‘\\\\b’, ‘g’)

1

যারা তাদের কোডে একটি এনামকে বৈধতা দিতে চান তাদের জন্য আপনি গাইডটি অনুসরণ করতে পারেন

রেজেক্স ওয়ার্ল্ডে আপনি ^স্ট্রিং শুরু করতে এবং $এটি শেষ করতে ব্যবহার করতে পারেন । তাদের সাথে সম্মিলিতভাবে ব্যবহার |করা আপনি যা চান তা হতে পারে:

^(Male)$|^(Female)$

এটি কেবল Maleবা Femaleমামলার ক্ষেত্রে সত্য ফিরে আসবে ।


^এবং $একটি রেখার সূচনা (যথাক্রমে শেষের সাথে) মেলান, সুতরাং আপনার উদাহরণটি কেবল তখনই মিলবে যদি সেগুলি লাইনটিতে কেবলমাত্র শব্দ হয়।
জেনেটেড

আমি যখন এনামকে বৈধতা দিতে চাই তখন ঠিক এইটাই চাই! সমস্যাটা কি?
মোহামাদ্রেজা রহিমিয়ান গোলকান্দানি

0

আপনি যদি এটি নোটপ্যাড ++ এ করছেন

[\w]+ 

আপনাকে পুরো শব্দটি দেবে এবং আপনি এটি একটি গোষ্ঠী হিসাবে পেতে বন্ধনী যুক্ত করতে পারেন। উদাহরণ: conv1 = Conv2D(64, (3, 3), activation=LeakyReLU(alpha=a), padding='valid', kernel_initializer='he_normal')(inputs)। আমি LeakyReLUমন্তব্য হিসাবে এটির নিজস্ব লাইনে যেতে চাই এবং বর্তমান সক্রিয়করণটি প্রতিস্থাপন করতে চাই। নোটপ্যাড ++ এ ফলো ফাইন্ড কমান্ডটি ব্যবহার করে করা যেতে পারে:

([\w]+)( = .+)(LeakyReLU.alpha=a.)(.+)

এবং প্রতিস্থাপন কমান্ডটি হয়ে যায়:

\1\2'relu'\4 \n    # \1 = LeakyReLU\(alpha=a\)\(\1\)

স্পেসগুলি আমার কোডটিতে সঠিক ফর্ম্যাটিং রাখা। :)


-1

সমস্ত "শব্দ" একটি স্ট্রিংয়ে পান

/([^\s]+)/g

মূলত ^/sঅর্থ ফাঁকির বিরতি (বা ফাঁকা জায়গাগুলির গোষ্ঠীগুলির সাথে মিল) লোভীর পক্ষে
ভুলে যাবেন নাg

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.