স্বল্পতম তুলনামূলক নিয়মিত প্রকাশ expression


59

আপনার মিশনটি হ'ল সংক্ষিপ্ত বৈধ নিয়মিত অভিব্যক্তি লিখুন যে কোনও স্ট্রিং মেলে না, খালি স্ট্রিং অন্তর্ভুক্ত।

জমা দেওয়ার ক্ষেত্রে অবশ্যই এই ফর্মটি থাকতে হবে ("আক্ষরিক স্বরলিপি"):

/pattern/optional-flags

সংক্ষিপ্ততম regexp জয়। Regexp আকার অক্ষর গণনা করা হয়। (স্ল্যাশ এবং পতাকা সহ)

আপনার regexp কীভাবে কাজ করে তা ব্যাখ্যা করুন (এটি যদি তুচ্ছ না হয়)

ধন্যবাদ, এবং মজা করুন!


এটা আমার কাছ থেকে একটি প্রশ্ন অনুপ্রেরণা। আমি যদিও কয়েক দিন অপেক্ষা করতে যাচ্ছি। একই সময়ে 2 টি রেজেক্স প্রশ্ন সক্রিয় করতে চাই না
ক্রাঙ্কার

13
"বৈধ" কোন প্রয়োগ অনুযায়ী? আমি শুধু একটি মজাদার এক যে পার্ল সঙ্গে ঠিক আছে পেয়েছি (এবং যে অনুযায়ী বৈধ শুধুমাত্র পুনরায়- ব্যাকরণ আমি জানতে পারেন , কিন্তু যে, grep এবং পাইথন এর পুনরায় মডিউল অস্বীকার করে।
জোশ Caswell

1
হ্যাঁ, রেগেক্সের কোন উপভাষা (গুলি) ? অনেকগুলি বিভিন্ন আছে।
হিপ্পিট্রেইল

1
তবে রাষ্ট্রপতিদের নাম কী? xkcd.com/1313
কার্ল উইথফট

@ কার্লউইথথফট আপনাকে সেই প্রতিযোগিতায় অংশ নিতে একটি প্রোগ্রাম হতে হবে: কোডগল্ফ.স্ট্যাকেক্সেঞ্জাং.কম
কিউ

উত্তর:


53

6 টি চর

প্রিমো এবং পিটার টেলরের উত্তর এবং এর থেকে একটি ইঙ্গিত man perlre:

/(?!)/

এই পার্ল-সামঞ্জস্যপূর্ণ রেজেক্সটি একটি খালি স্ট্রিংয়ের সাথে মেলে যা অন্য খালি স্ট্রিং দ্বারা অনুসরণ করা হয় না।


+1 - এটি সম্ভবত সবচেয়ে সংক্ষিপ্ত উত্তর যা বহুলভাবে বহনযোগ্য (বরাবর /x\by/, তবে আমাকে যদি সত্যিই কখনও এরকম একটি রেজেক্স ব্যবহার করতে হত - কারণ যাই হোক না কেন - তবে এই উত্তরটিও সবচেয়ে পরিষ্কার)
মার্টিন ইন্ডার

@ এম.বুয়েটনার: ধন্যবাদ প্রিমো /(*FAIL)/সম্ভবত পরিষ্কার, যদিও। (এবং প্রকৃতপক্ষে man perlreখনিটি তার অভ্যন্তরীণভাবে প্রসারিত হয়েছে উল্লেখ করে এটি ছেড়ে দিয়েছিল))
নেট এল্ড্রেজ

/(*FAIL)/যদিও হিসাবে বহনযোগ্য নয়। এমনকি পার্লেও, আমি মনে করি এটি নেতিবাচক চেহারাগুলির চেয়ে আরও অস্পষ্ট বৈশিষ্ট্য।
মার্টিন এন্ডার

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

1
প্রকৃতপক্ষে, পার্ল ডকুমেন্টেশন (এবং -Mre=debug) বলেছে যে পার্ল রিজেক্স অপটিমাইজার ( অনুসারে ) দ্বারা (?!)এটি অনুকূলিত হয়েছে । এছাড়াও, আমি মনে করি না আমি পার্ল 5 (এবং পার্ল 6, যেখানে এটি বলা হয় ) এর বাইরেও দেখেছি । (*FAIL)OPFAIL-Mre=debug(*FAIL)<!>
কনরাড বোরোস্কি

39

8 টি চর

/(?=a)b/

আমাদের এমন একটি স্ট্রিং দরকার যা একটি অক্ষর উভয় aএবং bযা স্পষ্টতই অসম্ভব containing


19
/(?!x)x/আরও অসম্ভব বলে মনে হচ্ছে ;-)
হাওয়ার্ড

@ পিটারটেলর কোথায়?
o0 '

@ লহরিস, কোথায়?
পিটার টেলর

@ পিটারটেলর @ আপনি যেসব অযৌক্তিক বিধি সম্পর্কে কথা বলছেন সেগুলি তিনি কোথায় রেখেছিলেন, আমি সেগুলি পাই না।
o0 '

7
বলছি, আমি যে গণনাটি বেছে নিয়েছি তার জন্য দুঃখিত, আমি ভেবেছিলাম যে তাদের পরে আসা optionচ্ছিক পতাকাগুলির কারণে স্ল্যাশগুলি অন্তর্ভুক্ত করা আরও সহজ হবে।
xem

31

5 অক্ষর

যারা গালাগালি করে $এবং তার থেকে পৃথক ^... এটি পার্লে আসলে কাজ করে:

/V\A/

\A স্ট্রিংয়ের শুরুতে মেলে।


এটা ^খুব কাজ করে।
টমাস


28

8 অক্ষর

/\w\b\w/

একটি শব্দ সীমানা ( \b) চারপাশে 'শব্দ' অক্ষর দ্বারা আবদ্ধ ( \w- এর মধ্যে একটি [_a-zA-Z0-9])। এটি তুলনাহীন, যেহেতু একটি শব্দের সীমানার পূর্ববর্তী বা অনুসরণকারী একটি অক্ষর অবশ্যই একটি 'অ-শব্দ' অক্ষর হতে পারে।

উপায় দ্বারা: এটি তুলনাহীন মত প্রকাশের অনুরূপ

/\W\b\W/

যেখানে \Wমানে 'নন-ওয়ার্ড' অক্ষর।


প্রতিযোগিতার নিয়ম অনুসারে এটি 8 টি অক্ষর, কারণ মোড়ক স্ল্যাশ /গণনা। উদাহরণস্বরূপ, ওপির এন্ট্রি দেখুন । যদিও এটি একটি দুর্দান্ত প্রবেশ!
জোশ ক্যাসওয়েল

সংক্ষিপ্ত কিছু এন্ট্রি দিয়ে প্রয়োগ-নির্ভর সমস্যা দেওয়া হলেও এটি বিজয়ী হতে পারে (বা পিটার টেলরের প্রবেশের সাথে আবদ্ধ ) !
জোশ ক্যাসওয়েল 14'14

খুবই ভদ্র! আমি ভেবেছিলাম এরকম কিছু অবশ্যই আছে!
টমাস

22

4 অক্ষর

/$a/

স্ট্রিং শেষ হওয়ার পরে "একটি" অনুসন্ধান করে।

অথবা

/a^/

স্ট্রিং শুরুর আগে একটি অনুসন্ধান করে।


20
যদি আপনি জানেন যে একটি দ্বি-চর সমাধান আছে কেন প্রশ্ন পোস্ট করবেন?
পিটার টেলর

3
@ হাওয়ার্ড: এটি একটি ফাঁকা স্ট্রিংয়ের সাথে মেলে: jsfiddle.net/RjLxJ
প্রোগ্রামফক্স

10
অপরাজেয় সমাধান সরবরাহ করার পরে আমি কেন সবসময় এই সমস্যাগুলি খুঁজে পাই :(
ক্র্যাঞ্চার

43
-1: ফেলে ^এবং $"অবৈধ" অবস্থানকে শুধু ঘটায় তাদের সাধারণ অক্ষরের হিসাবে গণ্য করা হবে। আপনার প্রথম উদাহরণ আক্ষরিক সাথে মেলে $aমধ্যে sedএবং সম্ভবত অন্যান্য প্রোগ্রাম।
বেন জ্যাকসন

2
@ জেন জ্যাকসন, পসিক্স এর্সের ক্ষেত্রে এটি সত্য নয়। echo 'a^b' | grep 'a^b'বনাম চেষ্টা করুন echo 'a^b' | grep -E 'a^b'9.4.9 পূর্ব অভিব্যক্তি অ্যাঙ্করিং
লিন্ডির

21

5 টি অক্ষর

/$.^/

/$^/ একটি খালি স্ট্রিংয়ের সাথে মিলবে, তবে এর মধ্যে একটি অক্ষরের প্রয়োজন হবে না।


6
এটি দুর্ভাগ্যক্রমে পার্ল ( এবং সম্ভবত সেড ) এর সাথে "$a^"(বা এর জায়গায় কোনও কিছুর সাথে 'a') মেলে । তবুও সুন্দর একটা!
জোশ ক্যাসওয়েল 14'14

@ জোশক্যাসওয়েল: আমার ধারণা পার্ল $.বর্তমান লাইন নম্বর ভেরিয়েবল হিসাবে ব্যাখ্যা করতে পারে । যা খালি থাকতে পারে, এক্ষেত্রে এটি হবে /^/
এমভিজি

একটি 'অক্ষর' এর অর্থ একটি এক-অক্ষরের স্ট্রিং।
jwg

3
@jwg অদলবদলটি দেখুন ^এবং$
mnip

আমি গ্রেপ দিয়ে প্যাটার্নটি চেষ্টা করেছি '$^', তবে দুর্ভাগ্যক্রমে এটি স্ট্রিংয়ের সাথে মেলে '$^'। স্মার্টাস গ্রেপ
জোয়েটউইলড

19

9 টি চর

আমি নিশ্চিত না তবে /[^\S\s]/এটি তুলনামূলকভাবে হওয়া উচিত কারণ এর অর্থ কোনও চরিত্র নয়, তবে তাদের মধ্যে একটির অন্তত একটি।


আপনি প্রয়োজন হবে না +
পিটার টেলর

10
/ [^ \ এস \ গুলি] / = 9 টি চর
xem

19

6 টি অক্ষর

আমি মনে করি আমার তৈরি এই রেজেক্সগুলি কাজ করবে:

/\b\B/

এটি একটি শব্দের সীমানা ( \b) এর সাথে মেলে যা শব্দের সীমানা নয় ( \B)। কোন ইমপোজস? আমাকে কি আপনাকে সত্যই এটি ব্যাখ্যা করতে হবে?


এটি কি একটি শব্দ-সীমার জন্য অনবদ্য-সীমারেখা অনুসরণ করে না?
grexter89

1
@ grexter89 হ্যাঁ, তবে এর মধ্যে তাদের কোনও অক্ষর থাকতে পারে না। অর্থাত্ সীমানা এবং সীমানা একই স্থান দখল করতে হবে।
দ্য হাট উইথ দ্য

2
আমার এটা ভাল লেগেছে. ভালো বল ধরা.
primo

18

4 টি অক্ষর

(কেবলমাত্র ECMAScript স্বাদ)

/[]/

অন্যান্য স্বাদে এই বৈধ অক্ষর শ্রেণী (নয় ]একটি অক্ষর বিবেচিত হবে মধ্যে বর্গ, তাই অভিব্যক্তি কারণ বর্গ কখনো বদ্ধ হয়, বৈধ নয়), কিন্তু এর নাম ECMAScript প্রমিত খালি চরিত্র শ্রেণীর স্বীকার করে। যেহেতু এটা একটি বর্গ এটা হয়েছে একটি অক্ষর (তাই খালি স্ট্রিং মিলছে না) মেলে, কিন্তু যেহেতু একটি একক অক্ষর অন্তর্ভুক্ত করা হয় কোন প্রকৃত চরিত্র পারেন ম্যাচ হবে।


আপনি কি বলছেন যে এটি একটি চরিত্রের সাথে মেলে? অথবা আপনি মনে করেন এই বেআইনি: /[]{0}/। (গীত। যদিও আমার নিজের উত্তর আংশিকভাবে আপনার মত দেখাচ্ছে তবে আমার লেখার পরে আমি আসলে আপনার পড়েছি))
এনএল-এক্স

@ nl এর-X আপনার ব্রাউজারের কনসোলে লেপন করুন: /[]/.test("")। এটি মিথ্যা ফিরে। একটি অক্ষর শ্রেণি কখনই খালি স্ট্রিংয়ের সাথে মেলে না, এমনকি এর মধ্যে অক্ষর না থাকলেও (আমি ধারণা করি তারা "যদি স্ট্রিংয়ের পরবর্তী অক্ষরটি তালিকাভুক্ত, ম্যাচ; ইএলএসই ব্যর্থ" এর মধ্যে একটি হয় তবে) এটি প্রয়োগ করা হয়। /[]{0}/আইনী (ECMAScript এ) এবং খালি স্ট্রিংয়ের সাথে মেলে ... তবে, আমি নিশ্চিত না যে এটি আমার উত্তরের সাথে কীভাবে প্রাসঙ্গিক।
মার্টিন এন্ডার

রুবি ২.০ এ ব্যর্থ
নাকিলন

@ নকিলন অবশ্যই তা করে। রুবি ECMAScript গন্ধটি প্রয়োগ করে না।
মার্টিন ইন্ডার

15

6 টি চর

/b++b/

প্যাসেসিভ কোয়ানটিফায়ার যতটা সম্ভব বি এর জন্য অনুসন্ধান করে, তারপরে আরও 1 টি। Cha টি অক্ষর কিন্তু প্রতিসাম্যের জন্য পয়েন্টস?


হু ... আমি সবেমাত্র একটি নতুন বৈশিষ্ট্য শিখেছি। স্পষ্টতই, আমার রেজেক্স দক্ষতা খারাপভাবে পুরানো। ধন্যবাদ, এবং +1।
ইলমারি করোনেন

8

6 টি অক্ষর

/(\1)/

কোনও বিজয়ী নয়, তবে আমি ভেবেছিলাম এটি মজাদার। গ্রেপ এবং পাইথন উভয়ই এটির জন্য বাধা দেয় তবে পার্ল এটির সাথে ঠিক আছে বলে মনে হয়।

খুব বাস্তবায়ন-নির্ভর বলে মনে হচ্ছে (যা অদ্ভুতভাবেই অবাক হয়, এর অদ্ভুততা দেখায়)। বব নীচে প্রতিবেদন করেছেন যে এটি জাভাস্ক্রিপ্টের রেজেক্স ইঞ্জিনের কোনও কিছুর সাথে মেলে ।


.NET এর রেজেক্স ইঞ্জিনটি এটি গ্রহণ করে বলে মনে হচ্ছে।
বব

এবং এটি সর্বদা মেলে (একটি খালি স্ট্রিং) জেএস
বব

8

কিছুটা প্রতারণাও হতে পারে তবে…

\0

... বাস্তবায়নগুলি কার্যত সকলের মধ্যে POSIX রেজেক্সে অপরিবর্তনীয় । বেসিক আর আর এক্সটেন্ডেড আর, এমনকি।

এবং পসিক্স আর আর পিসিআর-র সেইসব পেস্কি স্ল্যাশ এবং পতাকাগুলির প্রয়োজন নেই।


+1 ভাল !! দুর্ভাগ্যজনকভাবে, একমাত্র 0PERL এ কাজ করে না। "0"=~0সত্য ...
টমাস

একমাত্র \0ITYM? হ্যাঁ, বেশিরভাগ পার্লারে (1) এবং পিসিআরই বাস্তবায়ন সি স্ট্রিং ব্যবহার করে না তবে আকার-সীমাবদ্ধ বাফার ব্যবহার করে, যাদের মধ্যে এই কৌশলটি কাজ করবে না, তবে বেশিরভাগ পসিক্স আরই বাস্তবায়ন সি স্ট্রিংগুলিতে কাজ করে।
মীরাবিলোস

5

5 অক্ষর

/^.^/

স্ট্রিংটি ম্যাচগুলি স্ট্রিং শুরুর আগে যে কোনও একক অক্ষর দিয়ে শুরু হয়।


6
স্ট্রিংটির ".^"
সাথেও

@ বুথবি: কোন ভাষায় মেলে? পাইথন না। re.findall(r'^.^', '.^', re.DEBUG)
প্যাক্সুলি


@ বুথবাই ^এবং মেটাচার্যাক্টরা .আক্ষরিক নয়,
এড়াতে

1
এটা পার্ল ভেঙে গেছে। এই প্রশ্নের ভাষা সম্পর্কে ভাষা সম্পর্কে কিছু স্থির নিয়ম স্থাপন করা উচিত ছিল।
বুথবি

5

4 চর:

/.^/

GNU গ্রেপ 2.5.1 এবং egrep দিয়ে কাজ করে।


/.^/= 4 টি অক্ষর।
অ্যালেক্সি পপকভ 19

তোমার দরকার কেন //? এগুলি সর্বত্র প্রয়োজন হয় না ;-)
আরএসফালকন 7

মোড়ানো স্ল্যাশ /গণনা করুন, আসল প্রশ্নটি দেখুন ("স্ল্যাশ এবং পতাকা সহ") এবং ওপির এন্ট্রি দেখুন
অ্যালেক্সি পপকভ 19

অধিকার! আমি পড়তে মিস করছি :(
আরএসফালকন 7

না, নীচের মত একই কারণে: প্রকৃতপক্ষে, "^" কেবলমাত্র বিশেষ যদি প্যাটার্নের শুরুতে থাকে। অন্য কোনও কিছুর পরে "^" এড়ানোর দরকার নেই, সুতরাং এই উত্তরটি ভুল।
মীরাবিলোস

4

পার্ল 6 (5 অক্ষর)

/<!>/

বাছাইয়ের নিয়মের অপব্যবহার (কারণ পার্ল re রেজিক্সগুলি ভিন্ন, এবং ডিজাইনের মাধ্যমে স্টার্ডার্ড রেজেক্সেসের সাথে সঙ্গতিপূর্ণ নয়) তবে আমি পাত্তা দিই না। <!>নিয়ম পার্ল 6 কে অবহিত করে যে রেজেক্স মেলে না।


4

6 বাইট

/(*F)/

(*FAIL)পার্ল-কম্প্যাটেবল রেজেক্স ইঞ্জিন দ্বারা সমর্থিত একটি সংক্ষেপণ । এটি নির্দেশ করার জন্য @ হামজাকে ধন্যবাদ ।

9 বাইট

/(*FAIL)/

কোনও রেগেক্স ইঞ্জিনের সাথে কাজ করা উচিত যা ক্রিয়াগুলি একেবারে সমর্থন করে। আমি নিশ্চিত নই যে এটিকে আসলে আরও কিছু করতে হবে।


1
কিভাবে কাজ করে?
বুথবি

@ বুথবি (*FAIL)এমন ক্রিয়া যা সর্বদা ব্যর্থ হয়।
primo

@ প্রিমো আপনি কেবল ব্যবহার করতে পারেন /(*F)/:)
হামজা

4

4 অক্ষর

/$./

স্ট্রিংটি শেষ হওয়ার পরে কোনও অক্ষরের প্রয়োজন


একইভাবে অন্য দু'জনের মতো, $কেবল প্যাটার্নের শেষে বিশেষ।
মীরাবিলোস

3

ছাড়াই 2 ছাড়াই 4 টি অক্ষর with

টিএক্সআর ভাষার রেজেজ ইঞ্জিনে, একটি খালি অক্ষর শ্রেণীর সাথে []কোনও অক্ষর মেলে না এবং তাই কোনও স্ট্রিং নেই। এটি এমনভাবে আচরণ করে কারণ অক্ষর শ্রেণীর জন্য একটি চরিত্রের মিল প্রয়োজন, এবং যখন এটি খালি হয় এটি নির্দিষ্ট করে যে কোনও চরিত্র এটি সন্তুষ্ট করতে পারে না।

আর একটি উপায় হ'ল /.*/পরিপূরক অপারেটরটি ব্যবহার করে "খালি সহ সমস্ত স্ট্রিংয়ের সেট সেট করুন" /~.*/। এই সেটটির পরিপূরকটিতে কোনও স্ট্রিং নেই, এবং তাই কোনও কিছুর সাথে মেলে না।

ম্যান পৃষ্ঠায় এটি সমস্ত নথিভুক্ত করা হয়েছে:

   nomatch
          The  nomatch  regular  expression  represents  the empty set: it
          matches no strings at all, not even the empty string.  There  is
          no  dedicated  syntax  to  directly express nomatch in the regex
          language.  However, the empty character class []  is  equivalent
          to nomatch, and may be considered to be a notation for it. Other
          representations of nomatch are possible: for instance, the regex
          ~.* which is the complement of the regex that denotes the set of
          all possible strings, and thus denotes the empty set. A  nomatch
          has  uses;  for instance, it can be used to temporarily "comment
          out" regular expressions. The regex ([]abc|xyz) is equivalent to
          (xyz), since the []abc branch cannot match anything. Using [] to
          "block" a subexpression allows you to leave it  in  place,  then
          enable it later by removing the "block".

স্ল্যাশগুলি প্রতি সেজে রিজেক্স সিনট্যাক্সের অংশ নয়; এগুলি কেবলমাত্র বিরামচিহ্ন যা এস-এক্সপ্রেশন স্বরলিপিতে রেজিক্সগুলি সীমিত করে। সাক্ষী:

# match line of input with x variable, and then parse that as a regex
#
$ txr -c '@x
@(do (print (regex-parse x)) (put-char #\newline))' -
ab.*c                               <- input from tty: no slashes.
(compound #\a #\b (0+ wild) #\c)    <- output: AST of regex

আপনার উত্তরের জন্য ধন্যবাদ এবং স্ল্যাশ-গণনার জন্য আবার দুঃখিত। আমি ভেবেছিলাম লোকেরা পতাকা ব্যবহার করলে এগুলি অন্তর্ভুক্ত করা আরও সহজ হবে।
xem

1

6 টি চর

(বা 4, আপনি কীভাবে দেখুন তার উপর নির্ভর করে)

/{,0}/

রুবি ২.০ এ ব্যর্থ
নাকিলন

কোন রেজেক্স বাস্তবায়নে এটি ত্রুটি দেয় না?
পিটার টেলর

আমি কেবল এটি পিএইচপি এর প্রিগ_ম্যাচ ব্যবহার করে পরীক্ষা করেছি।
টেরি 13

1

এটি একটি পাঁচ চর রেজেেক্স।

/[]+/

এটি খালি গোষ্ঠীর সাথে এক বা একাধিকবার মেলে।

সম্পাদনা করুন:

অন্যান্য স্বাদের জন্য আমার উত্তর সরানো:

/.{-1}/

Thing inside এর মধ্যে কোনও সংখ্যা নয় যা কিছু টেক্সটের সাথে মিলবে।

এটি মিলবে "" {- 1} "


মনে রাখবেন যে এটি কেবল ইসমাস্ক্রিপ্ট স্বাদে কাজ করে। বেশিরভাগ (সমস্ত?) অন্যদের মধ্যে এটি একটি বৈধ এক্সপ্রেশন নয়।
মার্টিন এন্ডার

এটি কি অবৈধ নয়?
ওয়াসি

@ ওয়াসি ECMAScript- অনুসারে স্বাদে নেই
মার্টিন এণ্ডার


-1
/$^/

একটি জিনিস যা এটি শুরু হওয়ার আগেই শেষ হয় ...


7
খালি স্ট্রিংটি (কিছু কিছু বাস্তবায়নে, যাইহোক) সাথে মেলে।
জোশ ক্যাসওয়েল 13'14

1
আপনার বাস্তবায়ন নষ্ট হয়েছে :)
সাইমন


7
আরো উল্লেখযোগ্য, যেমন বেন জ্যাকসন নির্দিষ্ট , পার্ল মধ্যে, যেখানে এটি মেলে না "", এটা নেই একটি স্ট্রিং ঐ দুই আক্ষরিক অক্ষর ধারণকারী মেলে: "$^"
জোশ ক্যাসওয়েল

+1 আমি ঠিক একই পোস্ট করতে চাই! @ জোশ, এটি পিইআরএলে কাজ করে, এবং এটি খালি স্ট্রিংয়ের সাথে মেলে না! বেনের মন্তব্য ভেঙে গেছে, আমি এর জবাব দিয়েছি।
টমাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.