আমি মাঝে মাঝে হোয়াইটস্পেসের সাথে মিল রাখতে চাই তবে নতুনরেখায় না।
এখনও অবধি আমি অবলম্বন করছি [ \t]
। কম বিশ্রী উপায় আছে?
আমি মাঝে মাঝে হোয়াইটস্পেসের সাথে মিল রাখতে চাই তবে নতুনরেখায় না।
এখনও অবধি আমি অবলম্বন করছি [ \t]
। কম বিশ্রী উপায় আছে?
উত্তর:
পার্ল সংস্করণগুলি ৫.১০ এবং পরবর্তীকালে সহায়ক সংস্থা উল্লম্ব এবং অনুভূমিক অক্ষর শ্রেণিগুলি সমর্থন করে \v
এবং \h
পাশাপাশি জেনেরিক হোয়াইটস্পেস অক্ষর শ্রেণীর\s
সবচেয়ে পরিষ্কার সমাধান হ'ল অনুভূমিক সাদা স্থানের অক্ষর শ্রেণি ব্যবহার করা \h
। এটি ASCII সেট থেকে ট্যাব এবং স্পেসের সাথে মিলবে, প্রসারিত ASCII থেকে নন-ব্রেকিং স্পেস, বা এই ইউনিকোডের কোনও অক্ষর
U+0009 CHARACTER TABULATION
U+0020 SPACE
U+00A0 NO-BREAK SPACE (not matched by \s)
U+1680 OGHAM SPACE MARK
U+2000 EN QUAD
U+2001 EM QUAD
U+2002 EN SPACE
U+2003 EM SPACE
U+2004 THREE-PER-EM SPACE
U+2005 FOUR-PER-EM SPACE
U+2006 SIX-PER-EM SPACE
U+2007 FIGURE SPACE
U+2008 PUNCTUATION SPACE
U+2009 THIN SPACE
U+200A HAIR SPACE
U+202F NARROW NO-BREAK SPACE
U+205F MEDIUM MATHEMATICAL SPACE
U+3000 IDEOGRAPHIC SPACE
উল্লম্ব স্থান প্যাটার্ন \v
কম দরকারী, কিন্তু এই অক্ষরের সাথে মেলে
U+000A LINE FEED
U+000B LINE TABULATION
U+000C FORM FEED
U+000D CARRIAGE RETURN
U+0085 NEXT LINE (not matched by \s)
U+2028 LINE SEPARATOR
U+2029 PARAGRAPH SEPARATOR
সাতটি উল্লম্ব সাদা বর্ণের অক্ষর রয়েছে যা মিলছে \v
এবং আঠারটি অনুভূমিকগুলি যা মিলছে \h
। \s
তেইশটি অক্ষরের সাথে মেলে
সমস্ত হোয়াইটস্পেসের অক্ষরগুলি উল্লম্ব বা অনুভূমিক কোনও ওভারল্যাপ ছাড়াই হয় তবে এগুলি যথাযথ \h
উপগ্রহ নয় কারণ এটি ইউ + 00A0 নো-BREAK স্পেসের \v
সাথেও মেলে , এবং ইউ + 0085 নেক্সট লাইনটির সাথেও মেলে, যার কোনওটিই মিলে না\s
\h
সমর্থন করে এমন ভাষাগুলিতেই কাজ করে PCRE
।
[[:blank:]]
সাথে এটি মেলে না -
বা"\xA0"
\h
আমার ব্যবহারের ক্ষেত্রে পুরোপুরি কাজ করেছে যা নোটপ্যাড ++ এ 1 বা আরও অধিক সংলগ্ন অ-নতুন-লাইন স্পেসে সন্ধান / প্রতিস্থাপন করছে। আর কিছুই (সরল) কাজ করেনি।
\h
কিছুটা অ-মানক করে তোলে তা হ'ল এটি অন্তর্ভুক্ত MONGOLIAN VOWEL SEPARATOR
। ইউনিকোড এটিকে হোয়াইটস্পেস হিসাবে বিবেচনা করে না। সেই কারণে, পার্ল \h
পসিক্স blank
( [[:blank:]]
পার্লে, \p{Blank}
জাভাতে) এবং জাভা 8 এর থেকে পৃথক রয়েছে \h
। স্বীকার করা, এটি একটি প্রান্তের মামলা।
একটি দ্বৈত-নেতিবাচক ব্যবহার করুন:
/[^\S\r\n]/
এটি হ'ল-নন-হোয়াইটস্পেস (মূলধন এস পরিপূরক) বা নন-ক্যারিজ-রিটার্ন বা নন-লাইন। ডি মরগানের আইন দিয়ে বহিরাগত নয় ( অর্থাত্^
চরিত্রের শ্রেণীর পরিপূরক ) বিতরণ করা , এটি "হোয়াইট স্পেসের সমপরিমাণ তবে গাড়ীর ফেরত বা নতুন লাইনের নয়।" উভয় এবং প্যাটার্ন সহ সঠিকভাবে সমস্ত ইউনিক্স (এলএফ), ক্লাসিক ম্যাক ওএস (সিআর), এবং ডস-ইশ (সিআর এলএফ) নিউলাইন কনভেনশনগুলি পরিচালনা করে ।\r
\n
এর জন্য আমার কথা নেওয়ার দরকার নেই:
#! /usr/bin/env perl
use strict;
use warnings;
use 5.005; # for qr//
my $ws_not_crlf = qr/[^\S\r\n]/;
for (' ', '\f', '\t', '\r', '\n') {
my $qq = qq["$_"];
printf "%-4s => %s\n", $qq,
(eval $qq) =~ $ws_not_crlf ? "match" : "no match";
}
আউটপুট:
"" => মিল "\ f" => মিল "\ t" => মিল "\ r" => কোনও মিল নেই "\ n" => কোনও মিল নেই
উল্লম্ব ট্যাব বর্জন নোট, কিন্তু এটি v5.18 এ সম্বোধন করা হয় ।
খুব কঠোরভাবে আপত্তি করার আগে পার্ল ডকুমেন্টেশন একই কৌশল ব্যবহার করে। পার্লেরচার্ক্লাসের "হোয়াইটস্পেস" বিভাগের একটি পাদটীকা reads
পার্ল v5.18 এর আগে,
\s
উল্লম্ব ট্যাবের সাথে মেলে না।[^\S\cK]
(অস্পষ্টভাবে)\s
tradition তিহ্যগতভাবে যা করেছে তার সাথে মেলে ।
Perlrecharclass একই অধ্যায় এছাড়াও অন্যান্য পন্থা যে ডাবল নেগেটিভ ভাষা শিক্ষকদের বিরোধী পক্ষে অপমানকর হবে না দাড়ায়।
বাইরের স্থানীয় এবং ইউনিকোড বিধিগুলির বাইরে বা যখন /a
স্যুইচটি কার্যকর হয়, " পার্ল v5.18, উল্লম্ব ট্যাব থেকে শুরু হয় এবং \s
ম্যাচ করে ” " বাতিল করুন এবং ত্যাগ করার ম্যাচিং হোয়াইটস্পেস কিন্তু সম্পর্কে newline না করার জন্য।[\t\n\f\r ]
\cK
\r
\n
/[\t\f\cK ]/
যদি আপনার পাঠ্যটি ইউনিকোড হয়, উল্লিখিত ডকুমেন্টেশন বিভাগে টেবিল থেকে একটি প্যাটার্ন তৈরি করতে নীচের সাবটির মতো কোড ব্যবহার করুন ।
sub ws_not_nl {
local($_) = <<'EOTable';
0x0009 CHARACTER TABULATION h s
0x000a LINE FEED (LF) vs
0x000b LINE TABULATION vs [1]
0x000c FORM FEED (FF) vs
0x000d CARRIAGE RETURN (CR) vs
0x0020 SPACE h s
0x0085 NEXT LINE (NEL) vs [2]
0x00a0 NO-BREAK SPACE h s [2]
0x1680 OGHAM SPACE MARK h s
0x2000 EN QUAD h s
0x2001 EM QUAD h s
0x2002 EN SPACE h s
0x2003 EM SPACE h s
0x2004 THREE-PER-EM SPACE h s
0x2005 FOUR-PER-EM SPACE h s
0x2006 SIX-PER-EM SPACE h s
0x2007 FIGURE SPACE h s
0x2008 PUNCTUATION SPACE h s
0x2009 THIN SPACE h s
0x200a HAIR SPACE h s
0x2028 LINE SEPARATOR vs
0x2029 PARAGRAPH SEPARATOR vs
0x202f NARROW NO-BREAK SPACE h s
0x205f MEDIUM MATHEMATICAL SPACE h s
0x3000 IDEOGRAPHIC SPACE h s
EOTable
my $class;
while (/^0x([0-9a-f]{4})\s+([A-Z\s]+)/mg) {
my($hex,$name) = ($1,$2);
next if $name =~ /\b(?:CR|NL|NEL|SEPARATOR)\b/;
$class .= "\\N{U+$hex}";
}
qr/[$class]/u;
}
ডাবল-নেগেটিভ ট্রিকটি বর্ণমালার অক্ষরের সাথে মিলে যাওয়ার পক্ষেও কার্যকর। মনে রাখবেন যে \w
"শব্দ অক্ষর", বর্ণমালা অক্ষর এবং অঙ্কগুলি এবং আন্ডারস্কোরের সাথে মেলে । আমরা কুরুচিপূর্ণ-আমেরিকানরা মাঝে মাঝে এটি লিখতে চাই, বলে,
if (/[A-Za-z]+/) { ... }
তবে একটি দ্বৈত-নেতিবাচক চরিত্র-শ্রেণি লোকালকে সম্মান করতে পারে:
if (/[^\W\d_]+/) { ... }
এইভাবে "একটি শব্দের চরিত্র তবে অঙ্ক বা আন্ডারস্কোর নয়" প্রকাশ করা কিছুটা অস্বচ্ছ। একটি পসিক্স অক্ষর-শ্রেণি অভিপ্রায়টি আরও সরাসরি যোগাযোগ করে
if (/[[:alpha:]]+/) { ... }
অথবা স্যালব্লিন্টের পরামর্শ অনুসারে একটি ইউনিকোড সম্পত্তি সহ
if (/\p{Letter}+/) { ... }
\r
এ উইন্ডোতে যেমন, অন্তর্ভুক্ত থাকতে পারে , সুতরাং ম্যাচগুলি বাদ দেওয়ার বিষয়টিও বিবেচনা করুন /[^\S\r\n]/
:)
\h
সহজলভ্য হলে এই সমাধানটি ব্যবহার করার কোনও অজুহাত নেই ।
গ্রেগের উত্তরের একটি পরিবর্তনের সাথে সাথে ক্যারেজ রিটার্নও অন্তর্ভুক্ত রয়েছে:
/[^\S\r\n]/
এই রেজেক্সটি /[^\S\n]/
না হওয়ার চেয়ে নিরাপদ \r
। আমার যুক্তিটি হ'ল উইন্ডোজ \r\n
নতুন লাইনের জন্য এবং ম্যাক ওএস 9 ব্যবহার করে \r
। আপনি আজকাল \r
ছাড়া খুঁজে পাওয়ার সম্ভাবনা নেই \n
, তবে এটি যদি খুঁজে পান তবে এটি একটি নতুন লাইন ছাড়া আর কিছু বোঝাতে পারে না। সুতরাং, যেহেতু \r
একটি নতুন লাইন বোঝাতে পারে তাই আমাদের এটিও বাদ দেওয়া উচিত।
নীচের রেজেক্সটি সাদা স্পেসগুলির সাথে মিলবে তবে কোনও নতুন লাইন চরিত্রের নয়।
(?:(?!\n)\s)
আপনি যদি ক্যারেজ রিটার্নও যুক্ত করতে চান তবে operatorণাত্মক চেহারাগুলির ভিতরে অপারেটরের \r
সাথে যুক্ত করুন |
।
(?:(?![\n\r])\s)
যোগ +
অ ক্যাপচারিং গ্রুপ পর এক বা একাধিক সাদা স্পেস মেলে।
(?:(?![\n\r])\s)+
আমি জানি না কেন আপনি লোকেরা [[:blank:]]
কোনও অনুভূমিক সাদা স্থান ( স্পেস এবং ট্যাব) এর সাথে মেলে এমন পসিক্স অক্ষর শ্রেণির উল্লেখ করতে ব্যর্থ হয়েছেন ) এর সাথে । এই পসিক্স ক্র্যাক্টর ক্লাসটি বিআরই ( বেসিক রেগুলার এক্সপ্রেশনস ), ইআরই ( এক্সটেন্ডেড নিয়মিত এক্সপ্রেশন ), পিসিআরই ( পার্ল সামঞ্জস্যপূর্ণ নিয়মিত এক্সপ্রেশন ) এ কাজ করবে।
আপনি যা খুঁজছেন তা হ'ল পসিক্স blank
অক্ষর শ্রেণি। পার্লে এটি উল্লেখ করা হয়েছে:
[[:blank:]]
জাভাতে (সক্ষম করতে ভুলবেন না UNICODE_CHARACTER_CLASS
):
\p{Blank}
অনুরূপ তুলনায় \h
, POSIX blank
আরও কয়েকটি রেজেক্স ইঞ্জিন ( রেফারেন্স ) দ্বারা সমর্থিত । একটি বড় সুবিধা হ'ল এর সংজ্ঞাটি এন সি-তে স্থির করা হয়েছে : ইউনিকোড নিয়মিত এক্সপ্রেশনগুলির সামঞ্জস্য বৈশিষ্ট্য এবং ইউনিকোড সমর্থনকারী সমস্ত রেগেক্স স্বাদ জুড়ে স্ট্যান্ডার্ড। (উদাহরণস্বরূপ, পার্লে \h
অতিরিক্তটি অন্তর্ভুক্ত করার জন্য পছন্দ করে MONGOLIAN VOWEL SEPARATOR
)) তবে, পক্ষে যুক্তি\h
হ'ল এটি সর্বদা ইউনিকোড অক্ষরগুলি সনাক্ত করে (যদিও ইঞ্জিনগুলি তাতে একমত না হলেও), যখন পসিক্স অক্ষর শ্রেণিগুলি প্রায়শই ডিফল্ট ASCII থাকে কেবলমাত্র (জাভা হিসাবে)
তবে সমস্যাটি হ'ল এমনকি ইউনিকোডের সাথে লেগে থাকা 100% সমস্যাটি সমাধান করে না। নিম্নলিখিত অক্ষরগুলি বিবেচনা করুন যা ইউনিকোডে হোয়াইটস্পেস হিসাবে বিবেচিত হয় না:
U + 180E মঙ্গোলিয়ান স্বর বিভাজন
ইউ + 200 বি জিরো প্রস্থের স্পেস
ইউ + 200 সি জিরো প্রস্থ নন-যোগার
ইউ + 200 ডি জিরো প্রস্থ জোয়ার
U + 2060 ওয়ার্ড জোয়ার
U + FEFF শূন্য প্রস্থ অ-ভাবার স্থান নয়
Https://en.wikedia.org/wiki/White-space_character থেকে নেওয়া
পূর্বোক্ত মঙ্গোলিয়ান স্বর বিভাজক সম্ভবত কোনও ভাল কারণের জন্য অন্তর্ভুক্ত নেই। এটি 200 সি এবং 200 ডি সহ, শব্দের (এএফআইকে) মধ্যে ঘটে এবং এর ফলে অন্যান্য সমস্ত সাদা স্থান মেনে চলা মূল নিয়মটি ভেঙে দেয়: আপনি এটির সাথে টোকনাইজ করতে পারেন। এরা আরও মোডিফায়ারের মতো। যাইহোক, ZERO WIDTH SPACE
, WORD JOINER
, এবংZERO WIDTH NON-BREAKING SPACE
(যদি এটি একটি বাইট-অর্ডার চিহ্ন ছাড়া অন্য হিসাবে ব্যবহৃত হয়) আমার বই হোয়াইটস্পেস নিয়ম মাপসই করা হবে। অতএব, আমি তাদের আমার অনুভূমিক সাদা স্থানের অক্ষর শ্রেণিতে অন্তর্ভুক্ত করি।
জাভাতে:
static public final String HORIZONTAL_WHITESPACE = "[\\p{Blank}\\u200B\\u2060\\uFFEF]"
perl
মূল প্রশ্নের ট্যাগ question
[\p{Blank}\u200b\u180e]
প্রয়োজন তা জেনে আমি বিরক্তিকর বলে মনে করি । স্বীকার করা যায় যে, স্বর বিভাজককে একটি সাদা বর্ণের চরিত্র হিসাবে বিবেচনা করা হয় না , তবে শূন্য-প্রস্থের স্থানটি কেন ক্লাসে নেই \s
এবং \p{Blank}
আমাকে মারধর করে।
m/ /g
শুধু জায়গা দিন / /
, এবং এটি কাজ করবে। বা ব্যবহার করুন \S
- এটি ট্যাব, নিউলাইনস, স্পেসস ইত্যাদির মতো সমস্ত বিশেষ অক্ষরকে প্রতিস্থাপন করবে।
[\r\f]
।