আমি কীভাবে কোনও ক্ষেত্রে সংবেদনশীল নিয়মিত প্রকাশ করতে পারি?


85

এখন অবশ্যই আমি উভয় ক্ষেত্রে পরিচালনা করার জন্য আমার নিয়মিত প্রকাশটি লিখতে পারি, যেমন regexp.Compile("[a-zA-Z]"), তবে আমার নিয়মিত প্রকাশটি ব্যবহারকারী কর্তৃক প্রদত্ত স্ট্রিং থেকে তৈরি করা হয়েছে:

reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \\._-]", -1))

s.Nameনাম কোথায় । যা 'উত্তর বাই পশ্চিম' এর মতো কিছু হতে পারে। এখন, আমার সবচেয়ে স্পষ্ট সমাধান s.Nameহ'ল প্রতিটি অক্ষরের প্রতিটি চরিত্রের মধ্য দিয়ে চলতে হবে এবং প্রতিটি চিঠির জন্য '[এনএন]' লিখেছিলেন:

for i := 0; i < len(s.Name); i++ {
  if s.Name[i] == " " {
    fmt.Fprintf(str, "%s[ \\._-]", str);
  } else {
    fmt.Fprintf(str, "%s[%s%s]", str, strings.ToLower(s.Name[i]), strings.ToUpper(s.Name[i]))
  }
}

তবে আমি অনুভব করি এটি একটি বরং অ-মার্জিত সমাধান। গতি আসলেই উদ্বেগের বিষয় নয়, তবে অন্য কোনও উপায় আছে কিনা তা আমার জানা দরকার।

উত্তর:


171

আপনি রেজেক্সের প্রথম আইটেম হিসাবে কেস-সংবেদনশীল পতাকা সেট করতে পারেন।

আপনি "(?i)"একটি রেজেক্সের শুরুতে যুক্ত করে এটি করেন।

reg, err := regexp.Compile("(?i)"+strings.Replace(s.Name, " ", "[ \\._-]", -1))

একটি স্থির রেইগেক্সের জন্য এটি দেখতে দেখতে এটির মতো লাগবে।

r := regexp.MustCompile(`(?i)CaSe`)

পতাকা সম্পর্কিত আরও তথ্যের জন্য, "পতাকা" শব্দটির জন্য regexp/syntaxপ্যাকেজ ডকুমেন্টেশন (বা সিনট্যাক্স ডকুমেন্টেশন ) অনুসন্ধান করুন ।


4
তবে আমি দেখতে পেলাম যে এটি খুব ধীর, যখন অনেকগুলি ডেটা থাকে। ইউনিকোড ডেকে আনার কারণে.সিম্পলফোল্ডটি রেজিএক্সএক্স.মেলাতে, তাই আমি চিঠিগুলি উপরের দিকে পরিবর্তন করতে এবং তারপরে ম্যাচটি করতে regexp ব্যবহার করার পরামর্শ দিই। এই গতি। নিম্নলিখিত সময় ডেটা: y `` # বাই দ্বারা (? I) এক্সসিএমপি / বিন / ওটাক্যাম্প -o বিএসপি_2.2.0.html -f বিএসপি / ফ্রেমওয়ার্ক -f কোড / ফ্রেমওয়ার্ক 1271.94 এস ব্যবহারকারীর 7.32 এস সিস্টেম 97% সিপিইউ উপেক্ষা 21: 54.95 মোট # বাই টু আপ এবং ম্যাচ এক্সসিএমপি / বিন / ওটাক্যাম্প -o বিএসপি_2.2.0.html -f বিএসপি / ফ্রেমওয়ার্কস -f কোড / ফ্রেমওয়ার্ক 263.87 এর ব্যবহারকারী 8.99s সিস্টেমের 110% সিপিইউ 4: 06.44 মোট `` `
কিউজেগুই

4
দেখে মনে হচ্ছে কেস-সংবেদনশীল রিজে এক্সপক্সের
ড্যান এস্পারজা



4

iপতাকা ব্যবহার করুন । টিপ ডকুমেন্টেশন উদ্ধৃত :

দলবদ্ধকরণ:

(re)           numbered capturing group
(?P<name>re)   named & numbered capturing group
(?:re)         non-capturing group
(?flags)       set flags within current group; non-capturing
(?flags:re)    set flags during re; non-capturing

ফ্ল্যাগ সিনট্যাক্স হ'ল xyz (সেট) বা -xyz (পরিষ্কার) বা xy-z (সেট xy, ক্লিয়ার জেড)। পতাকাগুলি হ'ল:

i              case-insensitive (default false)
m              multi-line mode: ^ and $ match begin/end line in addition to begin/end text (default false)
s              let . match \n (default false)
U              ungreedy: swap meaning of x* and x*?, x+ and x+?, etc (default false)

23
কোডগুলিতে আমি কোথায় এই আই, এম, এস এবং ইউ রাখব?
কিয়ান চেন

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