রেজেক্স-গল্ফ: স্ট্রিংয়ের সাথে সমস্ত বিষয়বস্তু মেলে


10

আপনার কাজটি হ'ল একটি রেজেক্স লিখুন যা স্ট্রিংয়ের অভ্যন্তরে সমস্ত কিছুর সাথে মেলে।

একটি স্ট্রিং দু'টি অপরিবর্তিত (তবে অন্তর্ভুক্ত নয়) দ্বারা বেষ্টিত সমস্ত কিছু হিসাবে সংজ্ঞায়িত "

"দ্বারা পালানো যায় \, যা আবার পালাতেও পারে।

Testcases

string:  ab\c"defg\\\"hi"jkl"mn\\\\"opqrst""
matches:      ^^^^^^^^^^     ^^^^^^        ^ (the empty string)

স্কোরিং

সংক্ষিপ্ত সমাধান জিতেছে।

চশমা

  • দয়া করে ব্যবহৃত গন্ধটি নির্দিষ্ট করুন।
  • ইনপুটটি ভারসাম্যপূর্ণ হবে "
  • \তাত্ক্ষণিকভাবে স্ট্রিং-শুরুর-ডিলিমিটারের আগে থাকা কোনও হবে না । উদাহরণস্বরূপ, আপনার পরিচালনা করার প্রয়োজন হবে নাabc\"def"

1
\একটি স্ট্রিং আগে হবে ? উদাহরণস্বরূপ abc\"def"
জিমি 23013

এটি একটি গ্রুপে প্রতিটি স্ট্রিং মেলে উচিত? উদাহরণস্বরূপ, আমি এমন কিছু লিখতে পারি যার দুটি ম্যাচ আছে abc"de", একটি হয় dএবং অন্যটি e?
জিমি 23013

এটা অনুমোদিত .
ফাঁস নুন

খালি স্ট্রিং থাকবে?
মার্টিন ইন্ডার

হ্যাঁ, খালি স্ট্রিং থাকবে।
ফাঁস নুন

উত্তর:


3

পিসিআরই, 21 20 15 19 বাইট

(.|^)"\K(\\.|[^"])*

এখানে চেষ্টা করুন।

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

পিসিআরই, 25 23 বাইট

2 বাইট বন্ধ করে গল্ফ করার জন্য মার্টিন বাটনারকে ধন্যবাদ।

(\\.|[^"])*+(?!"(?R)|$)

এখানে চেষ্টা করুন।

ব্যাখ্যা

(
    \\.|[^"]     # An escaped character, or a character that isn't a double quote
)*+              # Possessive zero-or-more quantifier, which means backtracking
                 # could not happen after first match is found. That means if \\.
                 # matched, it would never switch to [^"], because it is always a
                 # match if it just stopped after the \\. without backtracking.
(?!"(?R)|$)      # Make sure it is not followed by a double quote and another
                 # match, or the end of the input.

মনে রাখবেন যে অধিকারী কোয়ান্টিফায়ার ( *+) নিশ্চিত করেছে যে নেতিবাচক চেহারাটি সর্বদা একটি পুরো স্ট্রিং বা অ-স্ট্রিংয়ের পুরো বিভাগের পরে শুরু হয়।

এখানে 4 টি মামলা রয়েছে:

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

চান (\\.|[^"])কাজ করে?
মার্টিন এন্ডার

@ মার্টিনব্যাটনার "
বেলিন্ট

@ বুলিন্ট আমার অর্থ ([^\\"]|\\.), সম্পূর্ণ সমাধান হিসাবে নয় of
মার্টিন এন্ডার

@ MartinBüttner ওহ, ঠিক আছে
Bálint

মার্টিনের পরামর্শটি কার্যকর করা উচিত, যেহেতু \\.কেবলমাত্র ব্যর্থ হয় যখন \(বা নতুন লাইন চরিত্রের পরে কোনও অক্ষর নেই , তবে এটি পতাকা দিয়ে সংশোধন করা যেতে পারে), এবং সেই ক্ষেত্রে নেতিবাচক চেহারা অনুসরণ করে coveredাকা থাকে। অধিকারী কোয়ান্টিফায়ার ব্যাকট্র্যাকিংয়ের প্রতিরোধ করে, তাই আমাদের দেখার মতো অন্য কোনও মামলা নেই।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

0

জাভাস্ক্রিপ্ট, 24 বাইট

"([^"\\]*(?:\\.[^"\\]*)*)"

গ্রুপ 1 স্ট্রিংয়ের বিষয়বস্তু।


এটি পালিয়ে থাকা উক্তিগুলির সাথে মোটেও কাজ করে না এবং এভাবে অনুমানটি পূরণ করতে ব্যর্থ হয়।
এটাকো

আহা - দুঃখিত। কীভাবে?
হুটোহেলিস্ট্যাট

বন্ধ করুন তবে সিগার নেই, আপনার বাইরের "এস
এ্যাটাকো

হ্যাঁ, এটাই আমার ভয় ছিল। জাভাস্ক্রিপ্টে এটি করার কোনও উপায় নেই, আমি অনুমান করছি?
হুটোহেলিস্ট্যাট

আপনি এটি একটি উপগোষ্ঠীতে ক্যাপচার করতে পারেন
এটিাকো

0

জাভাস্ক্রিপ্ট, 21 15 13 12 বাইট

"((\\?.)*?)"

স্ট্রিং সামগ্রীগুলি গ্রুপ 1 এ রয়েছে are

"   #start of string
(    #capturing group
 (
  \\?. #match character or escaped character
 )*?  #match as few as possible
)        
"   #end of string
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.