রেগেক্সের সাহায্যে ব্যাকস্ল্যাশ থেকে বাঁচতে পারবেন না?


113

আমি নীচের রেজেক্স ব্যবহার করছি

^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$

আমি জানি এটি কুৎসিত, তবে এখনও পর্যন্ত এটি ব্যাকস্ল্যাশ ছাড়াই ছাড়া অন্য উদ্দেশ্যে তার উদ্দেশ্য সম্পাদন করেছে বলে আমি মনে করি যে এটি হওয়া উচিত কারণ এটি পালানো হয়েছিল, আমি চেষ্টা করেছি বরং একই ফলাফলের \\পরিবর্তে \\\। কোন ধারনা?


4
আমি শিরোনামে টাইপো ঠিক করেছি, তবে শিরোনামটি সম্পর্কে গভীর ভয়ঙ্কর কিছু আছে "" রেইজেক্সের সাথে পিছনে ছোটাছুটি করা যায় না? " প্রকৃতপক্ষে!
অ্যাডাম ক্রসল্যান্ড 16

1
@ অ্যাডামক্রসল্যান্ড আমরা কি সবার ইচ্ছা করি না রেজেক্স আমাদের প্রতিক্রিয়া থেকে বাঁচতে সাহায্য করতে পারে? > _>
ইটন বি।

2
হেক, আমি কেবল চাই যে আমি পিছনে থেকে FROM রেগেক্স থেকে পালাতে পারব।
অ্যাডাম ক্রসল্যান্ড

উত্তর:


224

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

এই ক্ষেত্রে:

regex("\\\\")

হিসাবে ব্যাখ্যা করা হয় ...

regex("\\" [escaped backslash] followed by "\\" [escaped backslash])

হিসাবে ব্যাখ্যা করা হয় ...

regex(\\)

একটি রেগেক্স হিসাবে ব্যাখ্যা করা হয় যা একক ব্যাকস্ল্যাশের সাথে মেলে।


ভাষার উপর নির্ভর করে, আপনি उद्धृत করার আলাদা ফর্মটি ব্যবহার করতে সক্ষম হতে পারেন যা অনেকগুলি ব্যবহার না করা এড়াতে সিকোয়েন্সগুলি বিশ্লেষণ করে না - উদাহরণস্বরূপ পাইথনে:

re.compile(r'\\')

rকোট সামনে এটি একটি তোলে কাঁচা স্ট্রিং যা না পার্স ব্যাকস্ল্যাশ বেরিয়ে আছে।


14
হেই ... আমি কেবল এটির মধ্যে দৌড়েছি এবং তিনটি যুক্ত করা দরকার। এটি কাজ না করা পর্যন্ত আমি কেবল ব্যাকস্ল্যাশ যুক্ত করতে থাকি।
বিলেন্নাহ

উম্মম, পৃথিবীতে কেন এই রেজেক্স একবারের পরিবর্তে পিসিআরই হওয়ার কথা বলে তার দ্বিগুণ ব্যাখ্যা করা হয়েছে?
জিম মাইকেলস

3
@ জিমমিচেলস কারণ সমস্ত ভাষাগুলিতে অবিরত রেজেক্স লিটারাল থাকে না এবং এইভাবে প্রোগ্রামিং ল্যাঙ্গুয়েজ নিজেই তার স্ট্রিং সিনট্যাক্সে একবার স্ল্যাশ পলায়নের ব্যাখ্যা করে এবং ফলস্বরূপ স্ট্রিংটি তখন রেজেক্স ইঞ্জিনে পাস হয় (যা রেজেক্স সিনট্যাক্সে স্ল্যাশ পলায়নের ব্যাখ্যা করে)।
অ্যাম্বার

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

মেটা অক্ষরের প্রয়োজন মতো নিদর্শনগুলির সাথে ব্যাকস্ল্যাশগুলি অনুসন্ধান করার সময় এটি আরও বেশি সংশ্লেষিত হয়ে উঠতে পারে। উদাহরণস্বরূপ, একটি অঙ্ক পরে একটি ব্যাকস্ল্যাশ সন্ধান করুন। এখন আপনি চিন্তা করার কী হচ্ছে চেষ্টা নিম্নলিখিত অভিব্যক্তি দিকে তাকিয়ে থাকতে চাই: new RegExp('\\\\\\d');
জবাচেটে

15

এটি যদি আক্ষরিক না হয়, আপনাকে এমন ব্যবহার করতে হবে \\\\যাতে আপনি \\পেলেন একটি পালিয়ে যাওয়া ব্যাকস্ল্যাশ।

কারণ দুটি উপস্থাপনা আছে। আপনার রেজেক্সের স্ট্রিং উপস্থাপনায় আপনার "\\\\"কাছে যা পার্সারে প্রেরণ হবে। পার্সারটি দেখতে পাবে \\যা এটিকে বৈধ পলায়ন-ব্যাকস্ল্যাশ হিসাবে ব্যাখ্যা করে (যা একটি একক ব্যাকস্ল্যাশের সাথে মেলে)।


10

ব্যাকস্ল্যাশ \নিয়মিত অভিব্যক্তিগুলির জন্য পালানোর চরিত্র character সুতরাং একটি ডাবল ব্যাকস্ল্যাশ প্রকৃতপক্ষে একক, আক্ষরিক ব্যাকস্ল্যাশ মানে।

\ (backslash) followed by any of [\^$.|?*+(){} escapes the special character to suppress its special meaning.

রেফ: http://www.regular-expressions.info/references.html


4

Http://www.regular-expressions.info/charclass.html থেকে :

মনে রাখবেন যে একটি অক্ষর শ্রেণীর অভ্যন্তরে কেবলমাত্র বিশেষ অক্ষর বা মেটাচার্যাক্টরগুলি হ'ল বন্ধনী বন্ধনী (]), ব্যাকস্ল্যাশ (\\), ক্যারেট (^) এবং হাইফেন (-)। সাধারণ মেটাচার্যাক্টরগুলি একটি অক্ষর শ্রেণীর অভ্যন্তরে স্বাভাবিক অক্ষর, এবং ব্যাকস্ল্যাশ দ্বারা পালানোর প্রয়োজন হয় না। একটি তারা বা প্লাস অনুসন্ধান করতে, [+ *] ব্যবহার করুন। আপনি কোনও চরিত্র শ্রেণীর অভ্যন্তরে নিয়মিত মেটাচ্যাকার্টারগুলি এড়িয়ে চললে আপনার রেজেক্স সূক্ষ্মভাবে কাজ করবে, তবে এটির ফলে উল্লেখযোগ্যভাবে পাঠযোগ্যতা হ্রাস পাবে।

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

আপনি কোন ভাষায় রেজেক্স লিখছেন?


0

এই সমাধানটি আমার সমস্যা সমাধান করেছে যখন tag

alert(content.replace(/<br\/\>/g,'\n'));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.