123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506 |
- # This set of tests is for features that are compatible with all versions of
- # Perl >= 5.10, in non-UTF mode. It should run clean for the 8-bit, 16-bit, and
- # 32-bit PCRE libraries, and also using the perltest.sh script.
- # WARNING: Use only / as the pattern delimiter. Although pcre2test supports
- # a number of delimiters, all those other than / give problems with the
- # perltest.sh script.
-
- #forbid_utf
- #newline_default lf any anycrlf
- #perltest
- /the quick brown fox/
- the quick brown fox
- 0: the quick brown fox
- What do you know about the quick brown fox?
- 0: the quick brown fox
- \= Expect no match
- The quick brown FOX
- No match
- What do you know about THE QUICK BROWN FOX?
- No match
- /The quick brown fox/i
- the quick brown fox
- 0: the quick brown fox
- The quick brown FOX
- 0: The quick brown FOX
- What do you know about the quick brown fox?
- 0: the quick brown fox
- What do you know about THE QUICK BROWN FOX?
- 0: THE QUICK BROWN FOX
- /abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
- abcd\t\n\r\f\a\e9;\$\\?caxyz
- 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
- /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
- abxyzpqrrrabbxyyyypqAzz
- 0: abxyzpqrrrabbxyyyypqAzz
- abxyzpqrrrabbxyyyypqAzz
- 0: abxyzpqrrrabbxyyyypqAzz
- aabxyzpqrrrabbxyyyypqAzz
- 0: aabxyzpqrrrabbxyyyypqAzz
- aaabxyzpqrrrabbxyyyypqAzz
- 0: aaabxyzpqrrrabbxyyyypqAzz
- aaaabxyzpqrrrabbxyyyypqAzz
- 0: aaaabxyzpqrrrabbxyyyypqAzz
- abcxyzpqrrrabbxyyyypqAzz
- 0: abcxyzpqrrrabbxyyyypqAzz
- aabcxyzpqrrrabbxyyyypqAzz
- 0: aabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypAzz
- 0: aaabcxyzpqrrrabbxyyyypAzz
- aaabcxyzpqrrrabbxyyyypqAzz
- 0: aaabcxyzpqrrrabbxyyyypqAzz
- aaabcxyzpqrrrabbxyyyypqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqAzz
- aaabcxyzpqrrrabbxyyyypqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
- aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
- aaaabcxyzpqrrrabbxyyyypqAzz
- 0: aaaabcxyzpqrrrabbxyyyypqAzz
- abxyzzpqrrrabbxyyyypqAzz
- 0: abxyzzpqrrrabbxyyyypqAzz
- aabxyzzzpqrrrabbxyyyypqAzz
- 0: aabxyzzzpqrrrabbxyyyypqAzz
- aaabxyzzzzpqrrrabbxyyyypqAzz
- 0: aaabxyzzzzpqrrrabbxyyyypqAzz
- aaaabxyzzzzpqrrrabbxyyyypqAzz
- 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
- abcxyzzpqrrrabbxyyyypqAzz
- 0: abcxyzzpqrrrabbxyyyypqAzz
- aabcxyzzzpqrrrabbxyyyypqAzz
- 0: aabcxyzzzpqrrrabbxyyyypqAzz
- aaabcxyzzzzpqrrrabbxyyyypqAzz
- 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbxyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
- aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
- aaabcxyzpqrrrabbxyyyypABzz
- 0: aaabcxyzpqrrrabbxyyyypABzz
- aaabcxyzpqrrrabbxyyyypABBzz
- 0: aaabcxyzpqrrrabbxyyyypABBzz
- >>>aaabxyzpqrrrabbxyyyypqAzz
- 0: aaabxyzpqrrrabbxyyyypqAzz
- >aaaabxyzpqrrrabbxyyyypqAzz
- 0: aaaabxyzpqrrrabbxyyyypqAzz
- >>>>abcxyzpqrrrabbxyyyypqAzz
- 0: abcxyzpqrrrabbxyyyypqAzz
- \= Expect no match
- abxyzpqrrabbxyyyypqAzz
- No match
- abxyzpqrrrrabbxyyyypqAzz
- No match
- abxyzpqrrrabxyyyypqAzz
- No match
- aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
- No match
- aaaabcxyzzzzpqrrrabbbxyyypqAzz
- No match
- aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
- No match
- /^(abc){1,2}zz/
- abczz
- 0: abczz
- 1: abc
- abcabczz
- 0: abcabczz
- 1: abc
- \= Expect no match
- zz
- No match
- abcabcabczz
- No match
- >>abczz
- No match
- /^(b+?|a){1,2}?c/
- bc
- 0: bc
- 1: b
- bbc
- 0: bbc
- 1: b
- bbbc
- 0: bbbc
- 1: bb
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- aac
- 0: aac
- 1: a
- abbbbbbbbbbbc
- 0: abbbbbbbbbbbc
- 1: bbbbbbbbbbb
- bbbbbbbbbbbac
- 0: bbbbbbbbbbbac
- 1: a
- \= Expect no match
- aaac
- No match
- abbbbbbbbbbbac
- No match
- /^(b+|a){1,2}c/
- bc
- 0: bc
- 1: b
- bbc
- 0: bbc
- 1: bb
- bbbc
- 0: bbbc
- 1: bbb
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- aac
- 0: aac
- 1: a
- abbbbbbbbbbbc
- 0: abbbbbbbbbbbc
- 1: bbbbbbbbbbb
- bbbbbbbbbbbac
- 0: bbbbbbbbbbbac
- 1: a
- \= Expect no match
- aaac
- No match
- abbbbbbbbbbbac
- No match
- /^(ba|b*){1,2}?bc/
- babc
- 0: babc
- 1: ba
- bbabc
- 0: bbabc
- 1: ba
- bababc
- 0: bababc
- 1: ba
- \= Expect no match
- bababbc
- No match
- babababc
- No match
- /^\ca\cA\c[;\c:/
- \x01\x01\e;z
- 0: \x01\x01\x1b;z
- /^[ab\]cde]/
- athing
- 0: a
- bthing
- 0: b
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- \= Expect no match
- fthing
- No match
- [thing
- No match
- \\thing
- No match
- /^[]cde]/
- ]thing
- 0: ]
- cthing
- 0: c
- dthing
- 0: d
- ething
- 0: e
- \= Expect no match
- athing
- No match
- fthing
- No match
- /^[^ab\]cde]/
- fthing
- 0: f
- [thing
- 0: [
- \\thing
- 0: \
- \= Expect no match
- athing
- No match
- bthing
- No match
- ]thing
- No match
- cthing
- No match
- dthing
- No match
- ething
- No match
- /^[^]cde]/
- athing
- 0: a
- fthing
- 0: f
- \= Expect no match
- ]thing
- No match
- cthing
- No match
- dthing
- No match
- ething
- No match
- /^\�/
- �
- 0: \x81
- /^ÿ/
- ÿ
- 0: \xff
- /^[0-9]+$/
- 0
- 0: 0
- 1
- 0: 1
- 2
- 0: 2
- 3
- 0: 3
- 4
- 0: 4
- 5
- 0: 5
- 6
- 0: 6
- 7
- 0: 7
- 8
- 0: 8
- 9
- 0: 9
- 10
- 0: 10
- 100
- 0: 100
- \= Expect no match
- abc
- No match
- /^.*nter/
- enter
- 0: enter
- inter
- 0: inter
- uponter
- 0: uponter
- /^xxx[0-9]+$/
- xxx0
- 0: xxx0
- xxx1234
- 0: xxx1234
- \= Expect no match
- xxx
- No match
- /^.+[0-9][0-9][0-9]$/
- x123
- 0: x123
- x1234
- 0: x1234
- xx123
- 0: xx123
- 123456
- 0: 123456
- \= Expect no match
- 123
- No match
- /^.+?[0-9][0-9][0-9]$/
- x123
- 0: x123
- x1234
- 0: x1234
- xx123
- 0: xx123
- 123456
- 0: 123456
- \= Expect no match
- 123
- No match
- /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
- abc!pqr=apquxz.ixr.zzz.ac.uk
- 0: abc!pqr=apquxz.ixr.zzz.ac.uk
- 1: abc
- 2: pqr
- \= Expect no match
- !pqr=apquxz.ixr.zzz.ac.uk
- No match
- abc!=apquxz.ixr.zzz.ac.uk
- No match
- abc!pqr=apquxz:ixr.zzz.ac.uk
- No match
- abc!pqr=apquxz.ixr.zzz.ac.ukk
- No match
- /:/
- Well, we need a colon: somewhere
- 0: :
- \= Expect no match
- Fail without a colon
- No match
- /([\da-f:]+)$/i
- 0abc
- 0: 0abc
- 1: 0abc
- abc
- 0: abc
- 1: abc
- fed
- 0: fed
- 1: fed
- E
- 0: E
- 1: E
- ::
- 0: ::
- 1: ::
- 5f03:12C0::932e
- 0: 5f03:12C0::932e
- 1: 5f03:12C0::932e
- fed def
- 0: def
- 1: def
- Any old stuff
- 0: ff
- 1: ff
- \= Expect no match
- 0zzz
- No match
- gzzz
- No match
- fed\x20
- No match
- Any old rubbish
- No match
- /^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
- .1.2.3
- 0: .1.2.3
- 1: 1
- 2: 2
- 3: 3
- A.12.123.0
- 0: A.12.123.0
- 1: 12
- 2: 123
- 3: 0
- \= Expect no match
- .1.2.3333
- No match
- 1.2.3
- No match
- 1234.2.3
- No match
- /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
- 1 IN SOA non-sp1 non-sp2(
- 0: 1 IN SOA non-sp1 non-sp2(
- 1: 1
- 2: non-sp1
- 3: non-sp2
- 1 IN SOA non-sp1 non-sp2 (
- 0: 1 IN SOA non-sp1 non-sp2 (
- 1: 1
- 2: non-sp1
- 3: non-sp2
- \= Expect no match
- 1IN SOA non-sp1 non-sp2(
- No match
- /^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
- a.
- 0: a.
- Z.
- 0: Z.
- 2.
- 0: 2.
- ab-c.pq-r.
- 0: ab-c.pq-r.
- 1: .pq-r
- sxk.zzz.ac.uk.
- 0: sxk.zzz.ac.uk.
- 1: .uk
- x-.y-.
- 0: x-.y-.
- 1: .y-
- \= Expect no match
- -abc.peq.
- No match
- /^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
- *.a
- 0: *.a
- *.b0-a
- 0: *.b0-a
- 1: 0-a
- *.c3-b.c
- 0: *.c3-b.c
- 1: 3-b
- 2: .c
- *.c-a.b-c
- 0: *.c-a.b-c
- 1: -a
- 2: .b-c
- 3: -c
- \= Expect no match
- *.0
- No match
- *.a-
- No match
- *.a-b.c-
- No match
- *.c-a.0-c
- No match
- /^(?=ab(de))(abd)(e)/
- abde
- 0: abde
- 1: de
- 2: abd
- 3: e
- /^(?!(ab)de|x)(abd)(f)/
- abdf
- 0: abdf
- 1: <unset>
- 2: abd
- 3: f
- /^(?=(ab(cd)))(ab)/
- abcd
- 0: ab
- 1: abcd
- 2: cd
- 3: ab
- /^[\da-f](\.[\da-f])*$/i
- a.b.c.d
- 0: a.b.c.d
- 1: .d
- A.B.C.D
- 0: A.B.C.D
- 1: .D
- a.b.c.1.2.3.C
- 0: a.b.c.1.2.3.C
- 1: .C
- /^\".*\"\s*(;.*)?$/
- \"1234\"
- 0: "1234"
- \"abcd\" ;
- 0: "abcd" ;
- 1: ;
- \"\" ; rhubarb
- 0: "" ; rhubarb
- 1: ; rhubarb
- \= Expect no match
- \"1234\" : things
- No match
- /^$/
- \
- 0:
- \= Expect no match
- A non-empty line
- No match
- / ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
- ab c
- 0: ab c
- \= Expect no match
- abc
- No match
- ab cde
- No match
- /(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
- ab c
- 0: ab c
- \= Expect no match
- abc
- No match
- ab cde
- No match
- /^ a\ b[c ]d $/x
- a bcd
- 0: a bcd
- a b d
- 0: a b d
- \= Expect no match
- abcd
- No match
- ab d
- No match
- /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
- abcdefhijklm
- 0: abcdefhijklm
- 1: abc
- 2: bc
- 3: c
- 4: def
- 5: ef
- 6: f
- 7: hij
- 8: ij
- 9: j
- 10: klm
- 11: lm
- 12: m
- /^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
- abcdefhijklm
- 0: abcdefhijklm
- 1: bc
- 2: c
- 3: ef
- 4: f
- 5: ij
- 6: j
- 7: lm
- 8: m
- /^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
- a+ Z0+\x08\n\x1d\x12
- 0: a+ Z0+\x08\x0a\x1d\x12
- /^[.^$|()*+?{,}]+/
- .^\$(*+)|{?,?}
- 0: .^$(*+)|{?,?}
- /^a*\w/
- z
- 0: z
- az
- 0: az
- aaaz
- 0: aaaz
- a
- 0: a
- aa
- 0: aa
- aaaa
- 0: aaaa
- a+
- 0: a
- aa+
- 0: aa
- /^a*?\w/
- z
- 0: z
- az
- 0: a
- aaaz
- 0: a
- a
- 0: a
- aa
- 0: a
- aaaa
- 0: a
- a+
- 0: a
- aa+
- 0: a
- /^a+\w/
- az
- 0: az
- aaaz
- 0: aaaz
- aa
- 0: aa
- aaaa
- 0: aaaa
- aa+
- 0: aa
- /^a+?\w/
- az
- 0: az
- aaaz
- 0: aa
- aa
- 0: aa
- aaaa
- 0: aa
- aa+
- 0: aa
- /^\d{8}\w{2,}/
- 1234567890
- 0: 1234567890
- 12345678ab
- 0: 12345678ab
- 12345678__
- 0: 12345678__
- \= Expect no match
- 1234567
- No match
- /^[aeiou\d]{4,5}$/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 12345
- aaaaa
- 0: aaaaa
- \= Expect no match
- 123456
- No match
- /^[aeiou\d]{4,5}?/
- uoie
- 0: uoie
- 1234
- 0: 1234
- 12345
- 0: 1234
- aaaaa
- 0: aaaa
- 123456
- 0: 1234
- /\A(abc|def)=(\1){2,3}\Z/
- abc=abcabc
- 0: abc=abcabc
- 1: abc
- 2: abc
- def=defdefdef
- 0: def=defdefdef
- 1: def
- 2: def
- \= Expect no match
- abc=defdef
- No match
- /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
- abcdefghijkcda2
- 0: abcdefghijkcda2
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
- 10: j
- 11: k
- 12: cd
- abcdefghijkkkkcda2
- 0: abcdefghijkkkkcda2
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
- 10: j
- 11: k
- 12: cd
- /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
- cataract cataract23
- 0: cataract cataract23
- 1: cataract
- 2: aract
- 3: ract
- 4:
- 5: 3
- catatonic catatonic23
- 0: catatonic catatonic23
- 1: catatonic
- 2: atonic
- 3: tonic
- 4:
- 5: 3
- caterpillar caterpillar23
- 0: caterpillar caterpillar23
- 1: caterpillar
- 2: erpillar
- 3: <unset>
- 4:
- 5: 3
- /^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
- From abcd Mon Sep 01 12:33:02 1997
- 0: From abcd Mon Sep 01 12:33
- 1: abcd
- /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
- From abcd Mon Sep 01 12:33:02 1997
- 0: From abcd Mon Sep 01 12:33
- 1: Sep
- From abcd Mon Sep 1 12:33:02 1997
- 0: From abcd Mon Sep 1 12:33
- 1: Sep
- \= Expect no match
- From abcd Sep 01 12:33:02 1997
- No match
- /^12.34/s
- 12\n34
- 0: 12\x0a34
- 12\r34
- 0: 12\x0d34
- /\w+(?=\t)/
- the quick brown\t fox
- 0: brown
- /foo(?!bar)(.*)/
- foobar is foolish see?
- 0: foolish see?
- 1: lish see?
- /(?:(?!foo)...|^.{0,2})bar(.*)/
- foobar crowbar etc
- 0: rowbar etc
- 1: etc
- barrel
- 0: barrel
- 1: rel
- 2barrel
- 0: 2barrel
- 1: rel
- A barrel
- 0: A barrel
- 1: rel
- /^(\D*)(?=\d)(?!123)/
- abc456
- 0: abc
- 1: abc
- \= Expect no match
- abc123
- No match
- /^1234(?# test newlines
- inside)/
- 1234
- 0: 1234
- /^1234 #comment in extended re
- /x
- 1234
- 0: 1234
- /#rhubarb
- abcd/x
- abcd
- 0: abcd
- /^abcd#rhubarb/x
- abcd
- 0: abcd
- /^(a)\1{2,3}(.)/
- aaab
- 0: aaab
- 1: a
- 2: b
- aaaab
- 0: aaaab
- 1: a
- 2: b
- aaaaab
- 0: aaaaa
- 1: a
- 2: a
- aaaaaab
- 0: aaaaa
- 1: a
- 2: a
- /(?!^)abc/
- the abc
- 0: abc
- \= Expect no match
- abc
- No match
- /(?=^)abc/
- abc
- 0: abc
- \= Expect no match
- the abc
- No match
- /^[ab]{1,3}(ab*|b)/
- aabbbbb
- 0: aabb
- 1: b
- /^[ab]{1,3}?(ab*|b)/
- aabbbbb
- 0: aabbbbb
- 1: abbbbb
- /^[ab]{1,3}?(ab*?|b)/
- aabbbbb
- 0: aa
- 1: a
- /^[ab]{1,3}(ab*?|b)/
- aabbbbb
- 0: aabb
- 1: b
- / (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* # optional leading comment
- (?: (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- ) # initial word
- (?: (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- ) )* # further okay, if led by a period
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* @ (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # initial subdomain
- (?: #
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. # if led by a period...
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # ...further okay
- )*
- # address
- | # or
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- ) # one word, optionally followed by....
- (?:
- [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
- \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) | # comments, or...
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- # quoted strings
- )*
- < (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* # leading <
- (?: @ (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # initial subdomain
- (?: #
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. # if led by a period...
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # ...further okay
- )*
- (?: (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* , (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* @ (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # initial subdomain
- (?: #
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. # if led by a period...
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # ...further okay
- )*
- )* # further okay, if led by comma
- : # closing colon
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* )? # optional route
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- ) # initial word
- (?: (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- " (?: # opening quote...
- [^\\\x80-\xff\n\015"] # Anything except backslash and quote
- | # or
- \\ [^\x80-\xff] # Escaped something (something != CR)
- )* " # closing quote
- ) )* # further okay, if led by a period
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* @ (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # initial subdomain
- (?: #
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* \. # if led by a period...
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- | \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- ) # ...further okay
- )*
- # address spec
- (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* > # trailing >
- # name and address
- ) (?: [\040\t] | \(
- (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
- \) )* # optional trailing comment
- /x
- Alan Other <user\@dom.ain>
- 0: Alan Other <[email protected]>
- <user\@dom.ain>
- 0: [email protected]
- user\@dom.ain
- 0: [email protected]
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <[email protected]> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- 0: Other <[email protected]> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- A missing angle <user\@some.where
- 0: [email protected]
- \= Expect no match
- The quick brown fox
- No match
- /[\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # optional leading comment
- (?:
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- # Atom
- | # or
- " # "
- [^\\\x80-\xff\n\015"] * # normal
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
- " # "
- # Quoted string
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- \.
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- # Atom
- | # or
- " # "
- [^\\\x80-\xff\n\015"] * # normal
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
- " # "
- # Quoted string
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # additional words
- )*
- @
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # optional trailing comments
- (?:
- \.
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # optional trailing comments
- )*
- # address
- | # or
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- # Atom
- | # or
- " # "
- [^\\\x80-\xff\n\015"] * # normal
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
- " # "
- # Quoted string
- )
- # leading word
- [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
- (?:
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- |
- " # "
- [^\\\x80-\xff\n\015"] * # normal
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
- " # "
- ) # "special" comment or quoted string
- [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
- )*
- <
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # <
- (?:
- @
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # optional trailing comments
- (?:
- \.
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # optional trailing comments
- )*
- (?: ,
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- @
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # optional trailing comments
- (?:
- \.
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # optional trailing comments
- )*
- )* # additional domains
- :
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # optional trailing comments
- )? # optional route
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- # Atom
- | # or
- " # "
- [^\\\x80-\xff\n\015"] * # normal
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
- " # "
- # Quoted string
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- \.
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- # Atom
- | # or
- " # "
- [^\\\x80-\xff\n\015"] * # normal
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
- " # "
- # Quoted string
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # additional words
- )*
- @
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # optional trailing comments
- (?:
- \.
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- (?:
- [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
- (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
- |
- \[ # [
- (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
- \] # ]
- )
- [\040\t]* # Nab whitespace.
- (?:
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: # (
- (?: \\ [^\x80-\xff] |
- \( # (
- [^\\\x80-\xff\n\015()] * # normal*
- (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
- \) # )
- ) # special
- [^\\\x80-\xff\n\015()] * # normal*
- )* # )*
- \) # )
- [\040\t]* )* # If comment found, allow more spaces.
- # optional trailing comments
- )*
- # address spec
- > # >
- # name and address
- )
- /x
- Alan Other <user\@dom.ain>
- 0: Alan Other <[email protected]>
- <user\@dom.ain>
- 0: [email protected]
- user\@dom.ain
- 0: [email protected]
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <[email protected]>
- A. Other <user.1234\@dom.ain> (a comment)
- 0: Other <[email protected]>
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- A missing angle <user\@some.where
- 0: [email protected]
- \= Expect no match
- The quick brown fox
- No match
- /abc\0def\00pqr\000xyz\0000AB/
- abc\0def\00pqr\000xyz\0000AB
- 0: abc\x00def\x00pqr\x00xyz\x000AB
- abc456 abc\0def\00pqr\000xyz\0000ABCDE
- 0: abc\x00def\x00pqr\x00xyz\x000AB
- /abc\x0def\x00pqr\x000xyz\x0000AB/
- abc\x0def\x00pqr\x000xyz\x0000AB
- 0: abc\x0def\x00pqr\x000xyz\x0000AB
- abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
- 0: abc\x0def\x00pqr\x000xyz\x0000AB
- /^[\000-\037]/
- \0A
- 0: \x00
- \01B
- 0: \x01
- \037C
- 0: \x1f
- /\0*/
- \0\0\0\0
- 0: \x00\x00\x00\x00
- /A\x0{2,3}Z/
- The A\x0\x0Z
- 0: A\x00\x00Z
- An A\0\x0\0Z
- 0: A\x00\x00\x00Z
- \= Expect no match
- A\0Z
- No match
- A\0\x0\0\x0Z
- No match
- /^(cow|)\1(bell)/
- cowcowbell
- 0: cowcowbell
- 1: cow
- 2: bell
- bell
- 0: bell
- 1:
- 2: bell
- \= Expect no match
- cowbell
- No match
- /^\s/
- \040abc
- 0:
- \x0cabc
- 0: \x0c
- \nabc
- 0: \x0a
- \rabc
- 0: \x0d
- \tabc
- 0: \x09
- \= Expect no match
- abc
- No match
- /^a b
- c/x
- abc
- 0: abc
- /^(a|)\1*b/
- ab
- 0: ab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- \= Expect no match
- acb
- No match
- /^(a|)\1+b/
- aab
- 0: aab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- \= Expect no match
- ab
- No match
- /^(a|)\1?b/
- ab
- 0: ab
- 1: a
- aab
- 0: aab
- 1: a
- b
- 0: b
- 1:
- \= Expect no match
- acb
- No match
- /^(a|)\1{2}b/
- aaab
- 0: aaab
- 1: a
- b
- 0: b
- 1:
- \= Expect no match
- ab
- No match
- aab
- No match
- aaaab
- No match
- /^(a|)\1{2,3}b/
- aaab
- 0: aaab
- 1: a
- aaaab
- 0: aaaab
- 1: a
- b
- 0: b
- 1:
- \= Expect no match
- ab
- No match
- aab
- No match
- aaaaab
- No match
- /ab{1,3}bc/
- abbbbc
- 0: abbbbc
- abbbc
- 0: abbbc
- abbc
- 0: abbc
- \= Expect no match
- abc
- No match
- abbbbbc
- No match
- /([^.]*)\.([^:]*):[T ]+(.*)/
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
- /([^.]*)\.([^:]*):[T ]+(.*)/i
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
- /([^.]*)\.([^:]*):[t ]+(.*)/i
- track1.title:TBlah blah blah
- 0: track1.title:TBlah blah blah
- 1: track1
- 2: title
- 3: Blah blah blah
- /^[W-c]+$/
- WXY_^abc
- 0: WXY_^abc
- \= Expect no match
- wxy
- No match
- /^[W-c]+$/i
- WXY_^abc
- 0: WXY_^abc
- wxy_^ABC
- 0: wxy_^ABC
- /^[\x3f-\x5F]+$/i
- WXY_^abc
- 0: WXY_^abc
- wxy_^ABC
- 0: wxy_^ABC
- /^abc$/m
- abc
- 0: abc
- qqq\nabc
- 0: abc
- abc\nzzz
- 0: abc
- qqq\nabc\nzzz
- 0: abc
- /^abc$/
- abc
- 0: abc
- \= Expect no match
- qqq\nabc
- No match
- abc\nzzz
- No match
- qqq\nabc\nzzz
- No match
- /\Aabc\Z/m
- abc
- 0: abc
- abc\n
- 0: abc
- \= Expect no match
- qqq\nabc
- No match
- abc\nzzz
- No match
- qqq\nabc\nzzz
- No match
-
- /\A(.)*\Z/s
- abc\ndef
- 0: abc\x0adef
- 1: f
- /\A(.)*\Z/m
- \= Expect no match
- abc\ndef
- No match
- /(?:b)|(?::+)/
- b::c
- 0: b
- c::b
- 0: ::
- /[-az]+/
- az-
- 0: az-
- \= Expect no match
- b
- No match
- /[az-]+/
- za-
- 0: za-
- \= Expect no match
- b
- No match
- /[a\-z]+/
- a-z
- 0: a-z
- \= Expect no match
- b
- No match
- /[a-z]+/
- abcdxyz
- 0: abcdxyz
- /[\d-]+/
- 12-34
- 0: 12-34
- \= Expect no match
- aaa
- No match
- /\x5c/
- \\
- 0: \
- /\x20Z/
- the Zoo
- 0: Z
- \= Expect no match
- Zulu
- No match
- /(abc)\1/i
- abcabc
- 0: abcabc
- 1: abc
- ABCabc
- 0: ABCabc
- 1: ABC
- abcABC
- 0: abcABC
- 1: abc
- /abc$/
- abc
- 0: abc
- abc\n
- 0: abc
- \= Expect no match
- abc\ndef
- No match
- /(abc)\123/
- abc\x53
- 0: abcS
- 1: abc
- /(abc)\223/
- abc\x93
- 0: abc\x93
- 1: abc
- /(abc)\323/
- abc\xd3
- 0: abc\xd3
- 1: abc
- /(abc)\100/
- abc\x40
- 0: abc@
- 1: abc
- abc\100
- 0: abc@
- 1: abc
- /(abc)\1000/
- abc\x400
- 0: abc@0
- 1: abc
- abc\x40\x30
- 0: abc@0
- 1: abc
- abc\1000
- 0: abc@0
- 1: abc
- abc\100\x30
- 0: abc@0
- 1: abc
- abc\100\060
- 0: abc@0
- 1: abc
- abc\100\60
- 0: abc@0
- 1: abc
-
- /^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/
- ABCDEFGHIHI
- 0: ABCDEFGHIHI
- 1: A
- 2: B
- 3: C
- 4: D
- 5: E
- 6: F
- 7: G
- 8: H
- 9: I
- /^[A\8B\9C]+$/
- A8B9C
- 0: A8B9C
- \= Expect no match
- A8B9C\x00
- No match
- /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
- abcdefghijkllS
- 0: abcdefghijkllS
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
- 10: j
- 11: k
- 12: l
- /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
- abcdefghijk\12S
- 0: abcdefghijk\x0aS
- 1: a
- 2: b
- 3: c
- 4: d
- 5: e
- 6: f
- 7: g
- 8: h
- 9: i
- 10: j
- 11: k
- /a{0}bc/
- bc
- 0: bc
- /(a|(bc)){0,0}?xyz/
- xyz
- 0: xyz
- /abc[\10]de/
- abc\010de
- 0: abc\x08de
- /abc[\1]de/
- abc\1de
- 0: abc\x01de
- /(abc)[\1]de/
- abc\1de
- 0: abc\x01de
- 1: abc
- /(?s)a.b/
- a\nb
- 0: a\x0ab
- /^([^a])([^\b])([^c]*)([^d]{3,4})/
- baNOTccccd
- 0: baNOTcccc
- 1: b
- 2: a
- 3: NOT
- 4: cccc
- baNOTcccd
- 0: baNOTccc
- 1: b
- 2: a
- 3: NOT
- 4: ccc
- baNOTccd
- 0: baNOTcc
- 1: b
- 2: a
- 3: NO
- 4: Tcc
- bacccd
- 0: baccc
- 1: b
- 2: a
- 3:
- 4: ccc
- \= Expect no match
- anything
- No match
- b\bc
- No match
- baccd
- No match
- /[^a]/
- Abc
- 0: A
-
- /[^a]/i
- Abc
- 0: b
- /[^a]+/
- AAAaAbc
- 0: AAA
-
- /[^a]+/i
- AAAaAbc
- 0: bc
- /[^a]+/
- bbb\nccc
- 0: bbb\x0accc
-
- /[^k]$/
- abc
- 0: c
- \= Expect no match
- abk
- No match
-
- /[^k]{2,3}$/
- abc
- 0: abc
- kbc
- 0: bc
- kabc
- 0: abc
- \= Expect no match
- abk
- No match
- akb
- No match
- akk
- No match
- /^\d{8,}\@.+[^k]$/
- 12345678\@a.b.c.d
- 0: [email protected]
- 123456789\@x.y.z
- 0: [email protected]
- \= Expect no match
- 12345678\@x.y.uk
- No match
- 1234567\@a.b.c.d
- No match
- /(a)\1{8,}/
- aaaaaaaaa
- 0: aaaaaaaaa
- 1: a
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: a
- \= Expect no match
- aaaaaaa
- No match
- /[^a]/
- aaaabcd
- 0: b
- aaAabcd
- 0: A
- /[^a]/i
- aaaabcd
- 0: b
- aaAabcd
- 0: b
- /[^az]/
- aaaabcd
- 0: b
- aaAabcd
- 0: A
- /[^az]/i
- aaaabcd
- 0: b
- aaAabcd
- 0: b
- /\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
- \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
- 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
- /P[^*]TAIRE[^*]{1,6}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
- 0: PSTAIREISLL
- /P[^*]TAIRE[^*]{1,}?LL/
- xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
- 0: PSTAIREISLL
- /(\.\d\d[1-9]?)\d+/
- 1.230003938
- 0: .230003938
- 1: .23
- 1.875000282
- 0: .875000282
- 1: .875
- 1.235
- 0: .235
- 1: .23
-
- /(\.\d\d((?=0)|\d(?=\d)))/
- 1.230003938
- 0: .23
- 1: .23
- 2:
- 1.875000282
- 0: .875
- 1: .875
- 2: 5
- \= Expect no match
- 1.235
- No match
-
- /a(?)b/
- ab
- 0: ab
-
- /\b(foo)\s+(\w+)/i
- Food is on the foo table
- 0: foo table
- 1: foo
- 2: table
-
- /foo(.*)bar/
- The food is under the bar in the barn.
- 0: food is under the bar in the bar
- 1: d is under the bar in the
-
- /foo(.*?)bar/
- The food is under the bar in the barn.
- 0: food is under the bar
- 1: d is under the
- /(.*)(\d*)/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 53147
- 2:
-
- /(.*)(\d+)/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: 7
-
- /(.*?)(\d*)/
- I have 2 numbers: 53147
- 0:
- 1:
- 2:
- /(.*?)(\d+)/
- I have 2 numbers: 53147
- 0: I have 2
- 1: I have
- 2: 2
- /(.*)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers: 5314
- 2: 7
- /(.*?)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
- /(.*)\b(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
- /(.*\D)(\d+)$/
- I have 2 numbers: 53147
- 0: I have 2 numbers: 53147
- 1: I have 2 numbers:
- 2: 53147
- /^\D*(?!123)/
- ABC123
- 0: AB
-
- /^(\D*)(?=\d)(?!123)/
- ABC445
- 0: ABC
- 1: ABC
- \= Expect no match
- ABC123
- No match
-
- /^[W-]46]/
- W46]789
- 0: W46]
- -46]789
- 0: -46]
- \= Expect no match
- Wall
- No match
- Zebra
- No match
- 42
- No match
- [abcd]
- No match
- ]abcd[
- No match
-
- /^[W-\]46]/
- W46]789
- 0: W
- Wall
- 0: W
- Zebra
- 0: Z
- Xylophone
- 0: X
- 42
- 0: 4
- [abcd]
- 0: [
- ]abcd[
- 0: ]
- \\backslash
- 0: \
- \= Expect no match
- -46]789
- No match
- well
- No match
-
- /\d\d\/\d\d\/\d\d\d\d/
- 01/01/2000
- 0: 01/01/2000
- /word (?:[a-zA-Z0-9]+ ){0,10}otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
- \= Expect no match
- word cat dog elephant mussel cow horse canary baboon snake shark
- No match
- /word (?:[a-zA-Z0-9]+ ){0,300}otherword/
- \= Expect no match
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
- No match
- /^(a){0,0}/
- bcd
- 0:
- abc
- 0:
- aab
- 0:
- /^(a){0,1}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: a
- 1: a
- /^(a){0,2}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- /^(a){0,3}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- /^(a){0,}/
- bcd
- 0:
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- aaaaaaaa
- 0: aaaaaaaa
- 1: a
- /^(a){1,1}/
- abc
- 0: a
- 1: a
- aab
- 0: a
- 1: a
- \= Expect no match
- bcd
- No match
- /^(a){1,2}/
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- \= Expect no match
- bcd
- No match
- /^(a){1,3}/
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- \= Expect no match
- bcd
- No match
- /^(a){1,}/
- abc
- 0: a
- 1: a
- aab
- 0: aa
- 1: a
- aaa
- 0: aaa
- 1: a
- aaaaaaaa
- 0: aaaaaaaa
- 1: a
- \= Expect no match
- bcd
- No match
- /.*\.gif/
- borfle\nbib.gif\nno
- 0: bib.gif
- /.{0,}\.gif/
- borfle\nbib.gif\nno
- 0: bib.gif
- /.*\.gif/m
- borfle\nbib.gif\nno
- 0: bib.gif
- /.*\.gif/s
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif
- /.*\.gif/ms
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif
-
- /.*$/
- borfle\nbib.gif\nno
- 0: no
- /.*$/m
- borfle\nbib.gif\nno
- 0: borfle
- /.*$/s
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif\x0ano
- /.*$/ms
- borfle\nbib.gif\nno
- 0: borfle\x0abib.gif\x0ano
-
- /.*$/
- borfle\nbib.gif\nno\n
- 0: no
- /.*$/m
- borfle\nbib.gif\nno\n
- 0: borfle
- /.*$/s
- borfle\nbib.gif\nno\n
- 0: borfle\x0abib.gif\x0ano\x0a
- /.*$/ms
- borfle\nbib.gif\nno\n
- 0: borfle\x0abib.gif\x0ano\x0a
-
- /(.*X|^B)/
- abcde\n1234Xyz
- 0: 1234X
- 1: 1234X
- BarFoo
- 0: B
- 1: B
- \= Expect no match
- abcde\nBar
- No match
- /(.*X|^B)/m
- abcde\n1234Xyz
- 0: 1234X
- 1: 1234X
- BarFoo
- 0: B
- 1: B
- abcde\nBar
- 0: B
- 1: B
- /(.*X|^B)/s
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- \= Expect no match
- abcde\nBar
- No match
- /(.*X|^B)/ms
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- abcde\nBar
- 0: B
- 1: B
- /(?s)(.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- 1: abcde\x0a1234X
- BarFoo
- 0: B
- 1: B
- \= Expect no match
- abcde\nBar
- No match
- /(?s:.*X|^B)/
- abcde\n1234Xyz
- 0: abcde\x0a1234X
- BarFoo
- 0: B
- \= Expect no match
- abcde\nBar
- No match
- /^.*B/
- \= Expect no match
- abc\nB
- No match
-
- /(?s)^.*B/
- abc\nB
- 0: abc\x0aB
- /(?m)^.*B/
- abc\nB
- 0: B
-
- /(?ms)^.*B/
- abc\nB
- 0: abc\x0aB
- /(?ms)^B/
- abc\nB
- 0: B
- /(?s)B$/
- B\n
- 0: B
- /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
- 123456654321
- 0: 123456654321
-
- /^\d\d\d\d\d\d\d\d\d\d\d\d/
- 123456654321
- 0: 123456654321
- /^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
- 123456654321
- 0: 123456654321
-
- /^[abc]{12}/
- abcabcabcabc
- 0: abcabcabcabc
-
- /^[a-c]{12}/
- abcabcabcabc
- 0: abcabcabcabc
-
- /^(a|b|c){12}/
- abcabcabcabc
- 0: abcabcabcabc
- 1: c
- /^[abcdefghijklmnopqrstuvwxy0123456789]/
- n
- 0: n
- \= Expect no match
- z
- No match
- /abcde{0,0}/
- abcd
- 0: abcd
- \= Expect no match
- abce
- No match
- /ab[cd]{0,0}e/
- abe
- 0: abe
- \= Expect no match
- abcde
- No match
-
- /ab(c){0,0}d/
- abd
- 0: abd
- \= Expect no match
- abcd
- No match
- /a(b*)/
- a
- 0: a
- 1:
- ab
- 0: ab
- 1: b
- abbbb
- 0: abbbb
- 1: bbbb
- \= Expect no match
- bbbbb
- No match
-
- /ab\d{0}e/
- abe
- 0: abe
- \= Expect no match
- ab1e
- No match
-
- /"([^\\"]+|\\.)*"/
- the \"quick\" brown fox
- 0: "quick"
- 1: quick
- \"the \\\"quick\\\" brown fox\"
- 0: "the \"quick\" brown fox"
- 1: brown fox
- /.*?/g,aftertext
- abc
- 0:
- 0+ abc
- 0: a
- 0+ bc
- 0:
- 0+ bc
- 0: b
- 0+ c
- 0:
- 0+ c
- 0: c
- 0+
- 0:
- 0+
-
- /\b/g,aftertext
- abc
- 0:
- 0+ abc
- 0:
- 0+
- /\b/g,aftertext
- abc
- 0:
- 0+ abc
- 0:
- 0+
- //g
- abc
- 0:
- 0:
- 0:
- 0:
- /<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
- 1: BGCOLOR='#DBE9E9'
- 2: align=left valign=top
- 3: 43.
- 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)
- 5:
- 6:
- 7: <unset>
- 8: align=left valign=top
- 9: Lega lstaff.com
- 10: align=left valign=top
- 11: CA - Statewide
- /a[^a]b/
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
- /a.b/
- acb
- 0: acb
- \= Expect no match
- a\nb
- No match
-
- /a[^a]b/s
- acb
- 0: acb
- a\nb
- 0: a\x0ab
-
- /a.b/s
- acb
- 0: acb
- a\nb
- 0: a\x0ab
- /^(b+?|a){1,2}?c/
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- bbbac
- 0: bbbac
- 1: a
- bbbbac
- 0: bbbbac
- 1: a
- bbbbbac
- 0: bbbbbac
- 1: a
- /^(b+|a){1,2}?c/
- bac
- 0: bac
- 1: a
- bbac
- 0: bbac
- 1: a
- bbbac
- 0: bbbac
- 1: a
- bbbbac
- 0: bbbbac
- 1: a
- bbbbbac
- 0: bbbbbac
- 1: a
-
- /(?!\A)x/m
- a\bx\n
- 0: x
- a\nx\n
- 0: x
- \= Expect no match
- x\nb\n
- No match
-
- /(A|B)*?CD/
- CD
- 0: CD
-
- /(A|B)*CD/
- CD
- 0: CD
- /(AB)*?\1/
- ABABAB
- 0: ABAB
- 1: AB
- /(AB)*\1/
- ABABAB
- 0: ABABAB
- 1: AB
-
- /(?<!bar)foo/
- foo
- 0: foo
- catfood
- 0: foo
- arfootle
- 0: foo
- rfoosh
- 0: foo
- \= Expect no match
- barfoo
- No match
- towbarfoo
- No match
- /\w{3}(?<!bar)foo/
- catfood
- 0: catfoo
- \= Expect no match
- foo
- No match
- barfoo
- No match
- towbarfoo
- No match
- /(?<=(foo)a)bar/
- fooabar
- 0: bar
- 1: foo
- \= Expect no match
- bar
- No match
- foobbar
- No match
-
- /\Aabc\z/m
- abc
- 0: abc
- \= Expect no match
- abc\n
- No match
- qqq\nabc
- No match
- abc\nzzz
- No match
- qqq\nabc\nzzz
- No match
- /(?>.*\/)foo/
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
- 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
- \= Expect no match
- /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
- No match
- /(?>(\.\d\d[1-9]?))\d+/
- 1.230003938
- 0: .230003938
- 1: .23
- 1.875000282
- 0: .875000282
- 1: .875
- \= Expect no match
- 1.235
- No match
- /^((?>\w+)|(?>\s+))*$/
- now is the time for all good men to come to the aid of the party
- 0: now is the time for all good men to come to the aid of the party
- 1: party
- \= Expect no match
- this is not a line with only words and spaces!
- No match
-
- /(\d+)(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- 12345+
- 0: 12345
- 1: 1234
- 2: 5
- /((?>\d+))(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- \= Expect no match
- 12345+
- No match
- /(?>a+)b/
- aaab
- 0: aaab
- /((?>a+)b)/
- aaab
- 0: aaab
- 1: aaab
- /(?>(a+))b/
- aaab
- 0: aaab
- 1: aaa
- /(?>b)+/
- aaabbbccc
- 0: bbb
- /(?>a+|b+|c+)*c/
- aaabbbbccccd
- 0: aaabbbbc
- /((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
-
- /\(((?>[^()]+)|\([^()]+\))+\)/
- (abc)
- 0: (abc)
- 1: abc
- (abc(def)xyz)
- 0: (abc(def)xyz)
- 1: xyz
- \= Expect no match
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- No match
- /a(?-i)b/i
- ab
- 0: ab
- Ab
- 0: Ab
- \= Expect no match
- aB
- No match
- AB
- No match
-
- /(a (?x)b c)d e/
- a bcd e
- 0: a bcd e
- 1: a bc
- \= Expect no match
- a b cd e
- No match
- abcd e
- No match
- a bcde
- No match
-
- /(a b(?x)c d (?-x)e f)/
- a bcde f
- 0: a bcde f
- 1: a bcde f
- \= Expect no match
- abcdef
- No match
- /(a(?i)b)c/
- abc
- 0: abc
- 1: ab
- aBc
- 0: aBc
- 1: aB
- \= Expect no match
- abC
- No match
- aBC
- No match
- Abc
- No match
- ABc
- No match
- ABC
- No match
- AbC
- No match
-
- /a(?i:b)c/
- abc
- 0: abc
- aBc
- 0: aBc
- \= Expect no match
- ABC
- No match
- abC
- No match
- aBC
- No match
-
- /a(?i:b)*c/
- aBc
- 0: aBc
- aBBc
- 0: aBBc
- \= Expect no match
- aBC
- No match
- aBBC
- No match
-
- /a(?=b(?i)c)\w\wd/
- abcd
- 0: abcd
- abCd
- 0: abCd
- \= Expect no match
- aBCd
- No match
- abcD
- No match
-
- /(?s-i:more.*than).*million/i
- more than million
- 0: more than million
- more than MILLION
- 0: more than MILLION
- more \n than Million
- 0: more \x0a than Million
- \= Expect no match
- MORE THAN MILLION
- No match
- more \n than \n million
- No match
- /(?:(?s-i)more.*than).*million/i
- more than million
- 0: more than million
- more than MILLION
- 0: more than MILLION
- more \n than Million
- 0: more \x0a than Million
- \= Expect no match
- MORE THAN MILLION
- No match
- more \n than \n million
- No match
-
- /(?>a(?i)b+)+c/
- abc
- 0: abc
- aBbc
- 0: aBbc
- aBBc
- 0: aBBc
- \= Expect no match
- Abc
- No match
- abAb
- No match
- abbC
- No match
-
- /(?=a(?i)b)\w\wc/
- abc
- 0: abc
- aBc
- 0: aBc
- \= Expect no match
- Ab
- No match
- abC
- No match
- aBC
- No match
-
- /(?<=a(?i)b)(\w\w)c/
- abxxc
- 0: xxc
- 1: xx
- aBxxc
- 0: xxc
- 1: xx
- \= Expect no match
- Abxxc
- No match
- ABxxc
- No match
- abxxC
- No match
- /(?:(a)|b)(?(1)A|B)/
- aA
- 0: aA
- 1: a
- bB
- 0: bB
- \= Expect no match
- aB
- No match
- bA
- No match
- /^(a)?(?(1)a|b)+$/
- aa
- 0: aa
- 1: a
- b
- 0: b
- bb
- 0: bb
- \= Expect no match
- ab
- No match
-
- # Perl gets this next one wrong if the pattern ends with $; in that case it
- # fails to match "12".
- /^(?(?=abc)\w{3}:|\d\d)/
- abc:
- 0: abc:
- 12
- 0: 12
- 123
- 0: 12
- \= Expect no match
- xyz
- No match
- /^(?(?!abc)\d\d|\w{3}:)$/
- abc:
- 0: abc:
- 12
- 0: 12
- \= Expect no match
- 123
- No match
- xyz
- No match
-
- /(?(?<=foo)bar|cat)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- \= Expect no match
- foocat
- No match
- /(?(?<!foo)cat|bar)/
- foobar
- 0: bar
- cat
- 0: cat
- fcat
- 0: cat
- focat
- 0: cat
- \= Expect no match
- foocat
- No match
- /( \( )? [^()]+ (?(1) \) |) /x
- abcd
- 0: abcd
- (abcd)
- 0: (abcd)
- 1: (
- the quick (abcd) fox
- 0: the quick
- (abcd
- 0: abcd
- /( \( )? [^()]+ (?(1) \) ) /x
- abcd
- 0: abcd
- (abcd)
- 0: (abcd)
- 1: (
- the quick (abcd) fox
- 0: the quick
- (abcd
- 0: abcd
- /^(?(2)a|(1)(2))+$/
- 12
- 0: 12
- 1: 1
- 2: 2
- 12a
- 0: 12a
- 1: 1
- 2: 2
- 12aa
- 0: 12aa
- 1: 1
- 2: 2
- \= Expect no match
- 1234
- No match
- /((?i)blah)\s+\1/
- blah blah
- 0: blah blah
- 1: blah
- BLAH BLAH
- 0: BLAH BLAH
- 1: BLAH
- Blah Blah
- 0: Blah Blah
- 1: Blah
- blaH blaH
- 0: blaH blaH
- 1: blaH
- \= Expect no match
- blah BLAH
- No match
- Blah blah
- No match
- blaH blah
- No match
- /((?i)blah)\s+(?i:\1)/
- blah blah
- 0: blah blah
- 1: blah
- BLAH BLAH
- 0: BLAH BLAH
- 1: BLAH
- Blah Blah
- 0: Blah Blah
- 1: Blah
- blaH blaH
- 0: blaH blaH
- 1: blaH
- blah BLAH
- 0: blah BLAH
- 1: blah
- Blah blah
- 0: Blah blah
- 1: Blah
- blaH blah
- 0: blaH blah
- 1: blaH
- /((?i)blah)\s+(?m)A(?i:\1)/
- blah ABLAH
- 0: blah ABLAH
- 1: blah
- \= Expect no match
- blah aBLAH
- No match
- /(?>a*)*/
- a
- 0: a
- aa
- 0: aa
- aaaa
- 0: aaaa
-
- /(abc|)+/
- abc
- 0: abc
- 1:
- abcabc
- 0: abcabc
- 1:
- abcabcabc
- 0: abcabcabc
- 1:
- xyz
- 0:
- 1:
- /([a]*)*/
- a
- 0: a
- 1:
- aaaaa
- 0: aaaaa
- 1:
-
- /([ab]*)*/
- a
- 0: a
- 1:
- b
- 0: b
- 1:
- ababab
- 0: ababab
- 1:
- aaaabcde
- 0: aaaab
- 1:
- bbbb
- 0: bbbb
- 1:
-
- /([^a]*)*/
- b
- 0: b
- 1:
- bbbb
- 0: bbbb
- 1:
- aaa
- 0:
- 1:
-
- /([^ab]*)*/
- cccc
- 0: cccc
- 1:
- abab
- 0:
- 1:
-
- /([a]*?)*/
- a
- 0:
- 1:
- aaaa
- 0:
- 1:
-
- /([ab]*?)*/
- a
- 0:
- 1:
- b
- 0:
- 1:
- abab
- 0:
- 1:
- baba
- 0:
- 1:
-
- /([^a]*?)*/
- b
- 0:
- 1:
- bbbb
- 0:
- 1:
- aaa
- 0:
- 1:
-
- /([^ab]*?)*/
- c
- 0:
- 1:
- cccc
- 0:
- 1:
- baba
- 0:
- 1:
-
- /(?>a*)*/
- a
- 0: a
- aaabcde
- 0: aaa
-
- /((?>a*))*/
- aaaaa
- 0: aaaaa
- 1:
- aabbaa
- 0: aa
- 1:
-
- /((?>a*?))*/
- aaaaa
- 0:
- 1:
- aabbaa
- 0:
- 1:
- /(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
- 12-sep-98
- 0: 12-sep-98
- 12-09-98
- 0: 12-09-98
- \= Expect no match
- sep-12-98
- No match
-
- /(?<=(foo))bar\1/
- foobarfoo
- 0: barfoo
- 1: foo
- foobarfootling
- 0: barfoo
- 1: foo
- \= Expect no match
- foobar
- No match
- barfoo
- No match
- /(?i:saturday|sunday)/
- saturday
- 0: saturday
- sunday
- 0: sunday
- Saturday
- 0: Saturday
- Sunday
- 0: Sunday
- SATURDAY
- 0: SATURDAY
- SUNDAY
- 0: SUNDAY
- SunDay
- 0: SunDay
-
- /(a(?i)bc|BB)x/
- abcx
- 0: abcx
- 1: abc
- aBCx
- 0: aBCx
- 1: aBC
- bbx
- 0: bbx
- 1: bb
- BBx
- 0: BBx
- 1: BB
- \= Expect no match
- abcX
- No match
- aBCX
- No match
- bbX
- No match
- BBX
- No match
- /^([ab](?i)[cd]|[ef])/
- ac
- 0: ac
- 1: ac
- aC
- 0: aC
- 1: aC
- bD
- 0: bD
- 1: bD
- elephant
- 0: e
- 1: e
- Europe
- 0: E
- 1: E
- frog
- 0: f
- 1: f
- France
- 0: F
- 1: F
- \= Expect no match
- Africa
- No match
- /^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
- ab
- 0: ab
- 1: ab
- aBd
- 0: aBd
- 1: aBd
- xy
- 0: xy
- 1: xy
- xY
- 0: xY
- 1: xY
- zebra
- 0: z
- 1: z
- Zambesi
- 0: Z
- 1: Z
- \= Expect no match
- aCD
- No match
- XY
- No match
- /(?<=foo\n)^bar/m
- foo\nbar
- 0: bar
- \= Expect no match
- bar
- No match
- baz\nbar
- No match
- /(?<=(?<!foo)bar)baz/
- barbaz
- 0: baz
- barbarbaz
- 0: baz
- koobarbaz
- 0: baz
- \= Expect no match
- baz
- No match
- foobarbaz
- No match
- # The cases of aaaa and aaaaaa are missed out below because Perl does things
- # differently. We know that odd, and maybe incorrect, things happen with
- # recursive references in Perl, as far as 5.11.3 - see some stuff in test #2.
- /^(a\1?){4}$/
- aaaaa
- 0: aaaaa
- 1: a
- aaaaaaa
- 0: aaaaaaa
- 1: a
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- \= Expect no match
- a
- No match
- aa
- No match
- aaa
- No match
- aaaaaaaa
- No match
- aaaaaaaaa
- No match
- aaaaaaaaaaa
- No match
- aaaaaaaaaaaa
- No match
- aaaaaaaaaaaaa
- No match
- aaaaaaaaaaaaaa
- No match
- aaaaaaaaaaaaaaa
- No match
- aaaaaaaaaaaaaaaa
- No match
- /^(a\1?)(a\1?)(a\2?)(a\3?)$/
- aaaa
- 0: aaaa
- 1: a
- 2: a
- 3: a
- 4: a
- aaaaa
- 0: aaaaa
- 1: a
- 2: aa
- 3: a
- 4: a
- aaaaaa
- 0: aaaaaa
- 1: a
- 2: aa
- 3: a
- 4: aa
- aaaaaaa
- 0: aaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: a
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: a
- 2: aa
- 3: aaa
- 4: aaaa
- \= Expect no match
- a
- No match
- aa
- No match
- aaa
- No match
- aaaaaaaa
- No match
- aaaaaaaaa
- No match
- aaaaaaaaaaa
- No match
- aaaaaaaaaaaa
- No match
- aaaaaaaaaaaaa
- No match
- aaaaaaaaaaaaaa
- No match
- aaaaaaaaaaaaaaa
- No match
- aaaaaaaaaaaaaaaa
- No match
- # The following tests are taken from the Perl 5.005 test suite; some of them
- # are compatible with 5.004, but I'd rather not have to sort them out.
- /abc/
- abc
- 0: abc
- xabcy
- 0: abc
- ababc
- 0: abc
- \= Expect no match
- xbc
- No match
- axc
- No match
- abx
- No match
- /ab*c/
- abc
- 0: abc
- /ab*bc/
- abc
- 0: abc
- abbc
- 0: abbc
- abbbbc
- 0: abbbbc
- /.{1}/
- abbbbc
- 0: a
- /.{3,4}/
- abbbbc
- 0: abbb
- /ab{0,}bc/
- abbbbc
- 0: abbbbc
- /ab+bc/
- abbc
- 0: abbc
- \= Expect no match
- abc
- No match
- abq
- No match
- /ab{1,}bc/
- /ab+bc/
- abbbbc
- 0: abbbbc
- /ab{1,}bc/
- abbbbc
- 0: abbbbc
- /ab{1,3}bc/
- abbbbc
- 0: abbbbc
- /ab{3,4}bc/
- abbbbc
- 0: abbbbc
- /ab{4,5}bc/
- \= Expect no match
- abq
- No match
- abbbbc
- No match
- /ab?bc/
- abbc
- 0: abbc
- abc
- 0: abc
- /ab{0,1}bc/
- abc
- 0: abc
- /ab?bc/
- /ab?c/
- abc
- 0: abc
- /ab{0,1}c/
- abc
- 0: abc
- /^abc$/
- abc
- 0: abc
- \= Expect no match
- abbbbc
- No match
- abcc
- No match
- /^abc/
- abcc
- 0: abc
- /^abc$/
- /abc$/
- aabc
- 0: abc
- \= Expect no match
- aabcd
- No match
- /^/
- abc
- 0:
- /$/
- abc
- 0:
- /a.c/
- abc
- 0: abc
- axc
- 0: axc
- /a.*c/
- axyzc
- 0: axyzc
- /a[bc]d/
- abd
- 0: abd
- \= Expect no match
- axyzd
- No match
- abc
- No match
- /a[b-d]e/
- ace
- 0: ace
- /a[b-d]/
- aac
- 0: ac
- /a[-b]/
- a-
- 0: a-
- /a[b-]/
- a-
- 0: a-
- /a]/
- a]
- 0: a]
- /a[]]b/
- a]b
- 0: a]b
- /a[^bc]d/
- aed
- 0: aed
- \= Expect no match
- abd
- No match
- abd
- No match
- /a[^-b]c/
- adc
- 0: adc
- /a[^]b]c/
- adc
- 0: adc
- a-c
- 0: a-c
- \= Expect no match
- a]c
- No match
- /\ba\b/
- a-
- 0: a
- -a
- 0: a
- -a-
- 0: a
- /\by\b/
- \= Expect no match
- xy
- No match
- yz
- No match
- xyz
- No match
- /\Ba\B/
- \= Expect no match
- a-
- No match
- -a
- No match
- -a-
- No match
- /\By\b/
- xy
- 0: y
- /\by\B/
- yz
- 0: y
- /\By\B/
- xyz
- 0: y
- /\w/
- a
- 0: a
- /\W/
- -
- 0: -
- \= Expect no match
- a
- No match
- /a\sb/
- a b
- 0: a b
- /a\Sb/
- a-b
- 0: a-b
- \= Expect no match
- a b
- No match
- /\d/
- 1
- 0: 1
- /\D/
- -
- 0: -
- \= Expect no match
- 1
- No match
- /[\w]/
- a
- 0: a
- /[\W]/
- -
- 0: -
- \= Expect no match
- a
- No match
- /a[\s]b/
- a b
- 0: a b
- /a[\S]b/
- a-b
- 0: a-b
- \= Expect no match
- a b
- No match
- /[\d]/
- 1
- 0: 1
- /[\D]/
- -
- 0: -
- \= Expect no match
- 1
- No match
- /ab|cd/
- abc
- 0: ab
- abcd
- 0: ab
- /()ef/
- def
- 0: ef
- 1:
- /$b/
- /a\(b/
- a(b
- 0: a(b
- /a\(*b/
- ab
- 0: ab
- a((b
- 0: a((b
- /a\\b/
- a\\b
- 0: a\b
- /((a))/
- abc
- 0: a
- 1: a
- 2: a
- /(a)b(c)/
- abc
- 0: abc
- 1: a
- 2: c
- /a+b+c/
- aabbabc
- 0: abc
- /a{1,}b{1,}c/
- aabbabc
- 0: abc
- /a.+?c/
- abcabc
- 0: abc
- /(a+|b)*/
- ab
- 0: ab
- 1: b
- /(a+|b){0,}/
- ab
- 0: ab
- 1: b
- /(a+|b)+/
- ab
- 0: ab
- 1: b
- /(a+|b){1,}/
- ab
- 0: ab
- 1: b
- /(a+|b)?/
- ab
- 0: a
- 1: a
- /(a+|b){0,1}/
- ab
- 0: a
- 1: a
- /[^ab]*/
- cde
- 0: cde
- /abc/
- \= Expect no match
- b
- No match
- /a*/
- \
- 0:
- /([abc])*d/
- abbbcd
- 0: abbbcd
- 1: c
- /([abc])*bcd/
- abcd
- 0: abcd
- 1: a
- /a|b|c|d|e/
- e
- 0: e
- /(a|b|c|d|e)f/
- ef
- 0: ef
- 1: e
- /abcd*efg/
- abcdefg
- 0: abcdefg
- /ab*/
- xabyabbbz
- 0: ab
- xayabbbz
- 0: a
- /(ab|cd)e/
- abcde
- 0: cde
- 1: cd
- /[abhgefdc]ij/
- hij
- 0: hij
- /^(ab|cd)e/
- /(abc|)ef/
- abcdef
- 0: ef
- 1:
- /(a|b)c*d/
- abcd
- 0: bcd
- 1: b
- /(ab|ab*)bc/
- abc
- 0: abc
- 1: a
- /a([bc]*)c*/
- abc
- 0: abc
- 1: bc
- /a([bc]*)(c*d)/
- abcd
- 0: abcd
- 1: bc
- 2: d
- /a([bc]+)(c*d)/
- abcd
- 0: abcd
- 1: bc
- 2: d
- /a([bc]*)(c+d)/
- abcd
- 0: abcd
- 1: b
- 2: cd
- /a[bcd]*dcdcde/
- adcdcde
- 0: adcdcde
- /a[bcd]+dcdcde/
- \= Expect no match
- abcde
- No match
- adcdcde
- No match
- /(ab|a)b*c/
- abc
- 0: abc
- 1: ab
- /((a)(b)c)(d)/
- abcd
- 0: abcd
- 1: abc
- 2: a
- 3: b
- 4: d
- /[a-zA-Z_][a-zA-Z0-9_]*/
- alpha
- 0: alpha
- /^a(bc+|b[eh])g|.h$/
- abh
- 0: bh
- /(bc+d$|ef*g.|h?i(j|k))/
- effgz
- 0: effgz
- 1: effgz
- ij
- 0: ij
- 1: ij
- 2: j
- reffgz
- 0: effgz
- 1: effgz
- \= Expect no match
- effg
- No match
- bcdd
- No match
- /((((((((((a))))))))))/
- a
- 0: a
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
- 10: a
- /((((((((((a))))))))))\10/
- aa
- 0: aa
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
- 10: a
- /(((((((((a)))))))))/
- a
- 0: a
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
- /multiple words of text/
- \= Expect no match
- aa
- No match
- uh-uh
- No match
- /multiple words/
- multiple words, yeah
- 0: multiple words
- /(.*)c(.*)/
- abcde
- 0: abcde
- 1: ab
- 2: de
- /\((.*), (.*)\)/
- (a, b)
- 0: (a, b)
- 1: a
- 2: b
- /[k]/
- /abcd/
- abcd
- 0: abcd
- /a(bc)d/
- abcd
- 0: abcd
- 1: bc
- /a[-]?c/
- ac
- 0: ac
- /(abc)\1/
- abcabc
- 0: abcabc
- 1: abc
- /([a-c]*)\1/
- abcabc
- 0: abcabc
- 1: abc
- /(a)|\1/
- a
- 0: a
- 1: a
- ab
- 0: a
- 1: a
- \= Expect no match
- x
- No match
- /(([a-c])b*?\2)*/
- ababbbcbc
- 0: ababb
- 1: bb
- 2: b
- /(([a-c])b*?\2){3}/
- ababbbcbc
- 0: ababbbcbc
- 1: cbc
- 2: c
- /((\3|b)\2(a)x)+/
- aaaxabaxbaaxbbax
- 0: bbax
- 1: bbax
- 2: b
- 3: a
- /((\3|b)\2(a)){2,}/
- bbaababbabaaaaabbaaaabba
- 0: bbaaaabba
- 1: bba
- 2: b
- 3: a
- /abc/i
- ABC
- 0: ABC
- XABCY
- 0: ABC
- ABABC
- 0: ABC
- \= Expect no match
- aaxabxbaxbbx
- No match
- XBC
- No match
- AXC
- No match
- ABX
- No match
- /ab*c/i
- ABC
- 0: ABC
- /ab*bc/i
- ABC
- 0: ABC
- ABBC
- 0: ABBC
- /ab*?bc/i
- ABBBBC
- 0: ABBBBC
- /ab{0,}?bc/i
- ABBBBC
- 0: ABBBBC
- /ab+?bc/i
- ABBC
- 0: ABBC
- /ab+bc/i
- \= Expect no match
- ABC
- No match
- ABQ
- No match
- /ab{1,}bc/i
- /ab+bc/i
- ABBBBC
- 0: ABBBBC
- /ab{1,}?bc/i
- ABBBBC
- 0: ABBBBC
- /ab{1,3}?bc/i
- ABBBBC
- 0: ABBBBC
- /ab{3,4}?bc/i
- ABBBBC
- 0: ABBBBC
- /ab{4,5}?bc/i
- \= Expect no match
- ABQ
- No match
- ABBBBC
- No match
- /ab??bc/i
- ABBC
- 0: ABBC
- ABC
- 0: ABC
- /ab{0,1}?bc/i
- ABC
- 0: ABC
- /ab??bc/i
- /ab??c/i
- ABC
- 0: ABC
- /ab{0,1}?c/i
- ABC
- 0: ABC
- /^abc$/i
- ABC
- 0: ABC
- \= Expect no match
- ABBBBC
- No match
- ABCC
- No match
- /^abc/i
- ABCC
- 0: ABC
- /^abc$/i
- /abc$/i
- AABC
- 0: ABC
- /^/i
- ABC
- 0:
- /$/i
- ABC
- 0:
- /a.c/i
- ABC
- 0: ABC
- AXC
- 0: AXC
- /a.*?c/i
- AXYZC
- 0: AXYZC
- /a.*c/i
- AABC
- 0: AABC
- \= Expect no match
- AXYZD
- No match
- /a[bc]d/i
- ABD
- 0: ABD
- /a[b-d]e/i
- ACE
- 0: ACE
- \= Expect no match
- ABC
- No match
- ABD
- No match
- /a[b-d]/i
- AAC
- 0: AC
- /a[-b]/i
- A-
- 0: A-
- /a[b-]/i
- A-
- 0: A-
- /a]/i
- A]
- 0: A]
- /a[]]b/i
- A]B
- 0: A]B
- /a[^bc]d/i
- AED
- 0: AED
- /a[^-b]c/i
- ADC
- 0: ADC
- \= Expect no match
- ABD
- No match
- A-C
- No match
- /a[^]b]c/i
- ADC
- 0: ADC
- /ab|cd/i
- ABC
- 0: AB
- ABCD
- 0: AB
- /()ef/i
- DEF
- 0: EF
- 1:
- /$b/i
- \= Expect no match
- A]C
- No match
- B
- No match
- /a\(b/i
- A(B
- 0: A(B
- /a\(*b/i
- AB
- 0: AB
- A((B
- 0: A((B
- /a\\b/i
- A\\b
- 0: A\b
- a\\B
- 0: a\B
- /((a))/i
- ABC
- 0: A
- 1: A
- 2: A
- /(a)b(c)/i
- ABC
- 0: ABC
- 1: A
- 2: C
- /a+b+c/i
- AABBABC
- 0: ABC
- /a{1,}b{1,}c/i
- AABBABC
- 0: ABC
- /a.+?c/i
- ABCABC
- 0: ABC
- /a.*?c/i
- ABCABC
- 0: ABC
- /a.{0,5}?c/i
- ABCABC
- 0: ABC
- /(a+|b)*/i
- AB
- 0: AB
- 1: B
- /(a+|b){0,}/i
- AB
- 0: AB
- 1: B
- /(a+|b)+/i
- AB
- 0: AB
- 1: B
- /(a+|b){1,}/i
- AB
- 0: AB
- 1: B
- /(a+|b)?/i
- AB
- 0: A
- 1: A
- /(a+|b){0,1}/i
- AB
- 0: A
- 1: A
- /(a+|b){0,1}?/i
- AB
- 0:
- /[^ab]*/i
- CDE
- 0: CDE
- /([abc])*d/i
- ABBBCD
- 0: ABBBCD
- 1: C
- /([abc])*bcd/i
- ABCD
- 0: ABCD
- 1: A
- /a|b|c|d|e/i
- E
- 0: E
- /(a|b|c|d|e)f/i
- EF
- 0: EF
- 1: E
- /abcd*efg/i
- ABCDEFG
- 0: ABCDEFG
- /ab*/i
- XABYABBBZ
- 0: AB
- XAYABBBZ
- 0: A
- /(ab|cd)e/i
- ABCDE
- 0: CDE
- 1: CD
- /[abhgefdc]ij/i
- HIJ
- 0: HIJ
- /^(ab|cd)e/i
- \= Expect no match
- ABCDE
- No match
- /(abc|)ef/i
- ABCDEF
- 0: EF
- 1:
- /(a|b)c*d/i
- ABCD
- 0: BCD
- 1: B
- /(ab|ab*)bc/i
- ABC
- 0: ABC
- 1: A
- /a([bc]*)c*/i
- ABC
- 0: ABC
- 1: BC
- /a([bc]*)(c*d)/i
- ABCD
- 0: ABCD
- 1: BC
- 2: D
- /a([bc]+)(c*d)/i
- ABCD
- 0: ABCD
- 1: BC
- 2: D
- /a([bc]*)(c+d)/i
- ABCD
- 0: ABCD
- 1: B
- 2: CD
- /a[bcd]*dcdcde/i
- ADCDCDE
- 0: ADCDCDE
- /a[bcd]+dcdcde/i
- /(ab|a)b*c/i
- ABC
- 0: ABC
- 1: AB
- /((a)(b)c)(d)/i
- ABCD
- 0: ABCD
- 1: ABC
- 2: A
- 3: B
- 4: D
- /[a-zA-Z_][a-zA-Z0-9_]*/i
- ALPHA
- 0: ALPHA
- /^a(bc+|b[eh])g|.h$/i
- ABH
- 0: BH
- /(bc+d$|ef*g.|h?i(j|k))/i
- EFFGZ
- 0: EFFGZ
- 1: EFFGZ
- IJ
- 0: IJ
- 1: IJ
- 2: J
- REFFGZ
- 0: EFFGZ
- 1: EFFGZ
- \= Expect no match
- ADCDCDE
- No match
- EFFG
- No match
- BCDD
- No match
- /((((((((((a))))))))))/i
- A
- 0: A
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
- 10: A
- /((((((((((a))))))))))\10/i
- AA
- 0: AA
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
- 10: A
- /(((((((((a)))))))))/i
- A
- 0: A
- 1: A
- 2: A
- 3: A
- 4: A
- 5: A
- 6: A
- 7: A
- 8: A
- 9: A
- /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
- A
- 0: A
- 1: A
- /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
- C
- 0: C
- 1: C
- /multiple words of text/i
- \= Expect no match
- AA
- No match
- UH-UH
- No match
- /multiple words/i
- MULTIPLE WORDS, YEAH
- 0: MULTIPLE WORDS
- /(.*)c(.*)/i
- ABCDE
- 0: ABCDE
- 1: AB
- 2: DE
- /\((.*), (.*)\)/i
- (A, B)
- 0: (A, B)
- 1: A
- 2: B
- /[k]/i
- /abcd/i
- ABCD
- 0: ABCD
- /a(bc)d/i
- ABCD
- 0: ABCD
- 1: BC
- /a[-]?c/i
- AC
- 0: AC
- /(abc)\1/i
- ABCABC
- 0: ABCABC
- 1: ABC
- /([a-c]*)\1/i
- ABCABC
- 0: ABCABC
- 1: ABC
- /a(?!b)./
- abad
- 0: ad
- /a(?=d)./
- abad
- 0: ad
- /a(?=c|d)./
- abad
- 0: ad
- /a(?:b|c|d)(.)/
- ace
- 0: ace
- 1: e
- /a(?:b|c|d)*(.)/
- ace
- 0: ace
- 1: e
- /a(?:b|c|d)+?(.)/
- ace
- 0: ace
- 1: e
- acdbcdbe
- 0: acd
- 1: d
- /a(?:b|c|d)+(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
- /a(?:b|c|d){2}(.)/
- acdbcdbe
- 0: acdb
- 1: b
- /a(?:b|c|d){4,5}(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
- /a(?:b|c|d){4,5}?(.)/
- acdbcdbe
- 0: acdbcd
- 1: d
- /a(?:b|c|d){6,7}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
- /a(?:b|c|d){6,7}?(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
- /a(?:b|c|d){5,6}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
- /a(?:b|c|d){5,6}?(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
- /a(?:b|c|d){5,7}(.)/
- acdbcdbe
- 0: acdbcdbe
- 1: e
- /a(?:b|c|d){5,7}?(.)/
- acdbcdbe
- 0: acdbcdb
- 1: b
- /a(?:b|(c|e){1,2}?|d)+?(.)/
- ace
- 0: ace
- 1: c
- 2: e
- /^(.+)?B/
- AB
- 0: AB
- 1: A
- /^([^a-z])|(\^)$/
- .
- 0: .
- 1: .
- /^[<>]&/
- <&OUT
- 0: <&
- /^(a\1?){4}$/
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- \= Expect no match
- AB
- No match
- aaaaaaaaa
- No match
- aaaaaaaaaaa
- No match
- /^(a(?(1)\1)){4}$/
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
- \= Expect no match
- aaaaaaaaa
- No match
- aaaaaaaaaaa
- No match
- /(?<=a)b/
- ab
- 0: b
- \= Expect no match
- cb
- No match
- b
- No match
- /(?<!c)b/
- ab
- 0: b
- b
- 0: b
- b
- 0: b
- /(?:..)*a/
- aba
- 0: aba
- /(?:..)*?a/
- aba
- 0: a
- /^(?:b|a(?=(.)))*\1/
- abc
- 0: ab
- 1: b
- /^(){3,5}/
- abc
- 0:
- 1:
- /^(a+)*ax/
- aax
- 0: aax
- 1: a
- /^((a|b)+)*ax/
- aax
- 0: aax
- 1: a
- 2: a
- /^((a|bc)+)*ax/
- aax
- 0: aax
- 1: a
- 2: a
- /(a|x)*ab/
- cab
- 0: ab
- /(a)*ab/
- cab
- 0: ab
- /(?:(?i)a)b/
- ab
- 0: ab
- /((?i)a)b/
- ab
- 0: ab
- 1: a
- /(?:(?i)a)b/
- Ab
- 0: Ab
- /((?i)a)b/
- Ab
- 0: Ab
- 1: A
- /(?:(?i)a)b/
- \= Expect no match
- cb
- No match
- aB
- No match
- /((?i)a)b/
- /(?i:a)b/
- ab
- 0: ab
- /((?i:a))b/
- ab
- 0: ab
- 1: a
- /(?i:a)b/
- Ab
- 0: Ab
- /((?i:a))b/
- Ab
- 0: Ab
- 1: A
- /(?i:a)b/
- \= Expect no match
- aB
- No match
- aB
- No match
- /((?i:a))b/
- /(?:(?-i)a)b/i
- ab
- 0: ab
- /((?-i)a)b/i
- ab
- 0: ab
- 1: a
- /(?:(?-i)a)b/i
- aB
- 0: aB
- /((?-i)a)b/i
- aB
- 0: aB
- 1: a
- /(?:(?-i)a)b/i
- aB
- 0: aB
- \= Expect no match
- Ab
- No match
- AB
- No match
- /(?-i:a)b/i
- ab
- 0: ab
- /((?-i:a))b/i
- ab
- 0: ab
- 1: a
- /(?-i:a)b/i
- aB
- 0: aB
- /((?-i:a))b/i
- aB
- 0: aB
- 1: a
- /(?-i:a)b/i
- \= Expect no match
- AB
- No match
- Ab
- No match
- /((?-i:a))b/i
- /(?-i:a)b/i
- aB
- 0: aB
- /((?-i:a))b/i
- aB
- 0: aB
- 1: a
- /(?-i:a)b/i
- \= Expect no match
- Ab
- No match
- AB
- No match
- /((?-i:a))b/i
- /((?-i:a.))b/i
- \= Expect no match
- AB
- No match
- a\nB
- No match
- /((?s-i:a.))b/i
- a\nB
- 0: a\x0aB
- 1: a\x0a
- /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
- cabbbb
- 0: cabbbb
- /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
- caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
- /(ab)\d\1/i
- Ab4ab
- 0: Ab4ab
- 1: Ab
- ab4Ab
- 0: ab4Ab
- 1: ab
- /foo\w*\d{4}baz/
- foobar1234baz
- 0: foobar1234baz
- /x(~~)*(?:(?:F)?)?/
- x~~
- 0: x~~
- 1: ~~
- /^a(?#xxx){3}c/
- aaac
- 0: aaac
- /^a (?#xxx) (?#yyy) {3}c/x
- aaac
- 0: aaac
- /(?<![cd])b/
- \= Expect no match
- B\nB
- No match
- dbcb
- No match
- /(?<![cd])[ab]/
- dbaacb
- 0: a
- /(?<!(c|d))b/
- /(?<!(c|d))[ab]/
- dbaacb
- 0: a
- /(?<!cd)[ab]/
- cdaccb
- 0: b
- /^(?:a?b?)*$/
- \
- 0:
- a
- 0: a
- ab
- 0: ab
- aaa
- 0: aaa
- \= Expect no match
- dbcb
- No match
- a--
- No match
- aa--
- No match
- /((?s)^a(.))((?m)^b$)/
- a\nb\nc\n
- 0: a\x0ab
- 1: a\x0a
- 2: \x0a
- 3: b
- /((?m)^b$)/
- a\nb\nc\n
- 0: b
- 1: b
- /(?m)^b/
- a\nb\n
- 0: b
- /(?m)^(b)/
- a\nb\n
- 0: b
- 1: b
- /((?m)^b)/
- a\nb\n
- 0: b
- 1: b
- /\n((?m)^b)/
- a\nb\n
- 0: \x0ab
- 1: b
- /((?s).)c(?!.)/
- a\nb\nc\n
- 0: \x0ac
- 1: \x0a
- a\nb\nc\n
- 0: \x0ac
- 1: \x0a
- /((?s)b.)c(?!.)/
- a\nb\nc\n
- 0: b\x0ac
- 1: b\x0a
- a\nb\nc\n
- 0: b\x0ac
- 1: b\x0a
- /^b/
- /()^b/
- \= Expect no match
- a\nb\nc\n
- No match
- a\nb\nc\n
- No match
- /((?m)^b)/
- a\nb\nc\n
- 0: b
- 1: b
- /(x)?(?(1)a|b)/
- \= Expect no match
- a
- No match
- a
- No match
- /(x)?(?(1)b|a)/
- a
- 0: a
- /()?(?(1)b|a)/
- a
- 0: a
- /()(?(1)b|a)/
- /()?(?(1)a|b)/
- a
- 0: a
- 1:
- /^(\()?blah(?(1)(\)))$/
- (blah)
- 0: (blah)
- 1: (
- 2: )
- blah
- 0: blah
- \= Expect no match
- a
- No match
- blah)
- No match
- (blah
- No match
- /^(\(+)?blah(?(1)(\)))$/
- (blah)
- 0: (blah)
- 1: (
- 2: )
- blah
- 0: blah
- \= Expect no match
- blah)
- No match
- (blah
- No match
- /(?(?!a)a|b)/
- /(?(?!a)b|a)/
- a
- 0: a
- /(?(?=a)b|a)/
- \= Expect no match
- a
- No match
- a
- No match
- /(?(?=a)a|b)/
- a
- 0: a
- /(?=(a+?))(\1ab)/
- aaab
- 0: aab
- 1: a
- 2: aab
- /^(?=(a+?))\1ab/
- /(\w+:)+/
- one:
- 0: one:
- 1: one:
- /$(?<=^(a))/
- a
- 0:
- 1: a
- /(?=(a+?))(\1ab)/
- aaab
- 0: aab
- 1: a
- 2: aab
- /^(?=(a+?))\1ab/
- \= Expect no match
- aaab
- No match
- aaab
- No match
- /([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- 1: <unset>
- 2: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
- /^[^bcd]*(c+)/
- aexycd
- 0: aexyc
- 1: c
- /(a*)b+/
- caab
- 0: aab
- 1: aa
- /([\w:]+::)?(\w+)$/
- abcd
- 0: abcd
- 1: <unset>
- 2: abcd
- xy:z:::abcd
- 0: xy:z:::abcd
- 1: xy:z:::
- 2: abcd
- \= Expect no match
- abcd:
- No match
- abcd:
- No match
- /^[^bcd]*(c+)/
- aexycd
- 0: aexyc
- 1: c
- /(>a+)ab/
- /(?>a+)b/
- aaab
- 0: aaab
- /([[:]+)/
- a:[b]:
- 0: :[
- 1: :[
- /([[=]+)/
- a=[b]=
- 0: =[
- 1: =[
- /([[.]+)/
- a.[b].
- 0: .[
- 1: .[
- /((?>a+)b)/
- aaab
- 0: aaab
- 1: aaab
- /(?>(a+))b/
- aaab
- 0: aaab
- 1: aaa
- /((?>[^()]+)|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
- /a\Z/
- \= Expect no match
- aaab
- No match
- a\nb\n
- No match
- /b\Z/
- a\nb\n
- 0: b
- /b\z/
- /b\Z/
- a\nb
- 0: b
- /b\z/
- a\nb
- 0: b
-
- /^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
- a
- 0: a
- 1:
- abc
- 0: abc
- 1:
- a-b
- 0: a-b
- 1:
- 0-9
- 0: 0-9
- 1:
- a.b
- 0: a.b
- 1:
- 5.6.7
- 0: 5.6.7
- 1:
- the.quick.brown.fox
- 0: the.quick.brown.fox
- 1:
- a100.b200.300c
- 0: a100.b200.300c
- 1:
- 12-ab.1245
- 0: 12-ab.1245
- 1:
- \= Expect no match
- \
- No match
- .a
- No match
- -a
- No match
- a-
- No match
- a.
- No match
- a_b
- No match
- a.-
- No match
- a..
- No match
- ab..bc
- No match
- the.quick.brown.fox-
- No match
- the.quick.brown.fox.
- No match
- the.quick.brown.fox_
- No match
- the.quick.brown.fox+
- No match
- /(?>.*)(?<=(abcd|wxyz))/
- alphabetabcd
- 0: alphabetabcd
- 1: abcd
- endingwxyz
- 0: endingwxyz
- 1: wxyz
- \= Expect no match
- a rather long string that doesn't end with one of them
- No match
- /word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
- word cat dog elephant mussel cow horse canary baboon snake shark otherword
- 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
- \= Expect no match
- word cat dog elephant mussel cow horse canary baboon snake shark
- No match
-
- /word (?>[a-zA-Z0-9]+ ){0,30}otherword/
- \= Expect no match
- word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
- No match
- /(?<=\d{3}(?!999))foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- \= Expect no match
- 123abcfoo
- No match
-
- /(?<=(?!...999)\d{3})foo/
- 999foo
- 0: foo
- 123999foo
- 0: foo
- \= Expect no match
- 123abcfoo
- No match
- /(?<=\d{3}(?!999)...)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- \= Expect no match
- 123999foo
- No match
-
- /(?<=\d{3}...)(?<!999)foo/
- 123abcfoo
- 0: foo
- 123456foo
- 0: foo
- \= Expect no match
- 123999foo
- No match
- /<a[\s]+href[\s]*=[\s]* # find <a href=
- ([\"\'])? # find single or double quote
- (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
- /isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href=\'abcd xyz pqr\' cats
- 0: <a href='abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
- /<a\s+href\s*=\s* # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
- /isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href = \'abcd xyz pqr\' cats
- 0: <a href = 'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
- /<a\s+href(?>\s*)=(?>\s*) # find <a href=
- (["'])? # find single or double quote
- (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
- # quote, otherwise match up to next space
- /isx
- <a href=abcd xyz
- 0: <a href=abcd
- 1: <unset>
- 2: <unset>
- 3: abcd
- <a href=\"abcd xyz pqr\" cats
- 0: <a href="abcd xyz pqr"
- 1: "
- 2: abcd xyz pqr
- <a href = \'abcd xyz pqr\' cats
- 0: <a href = 'abcd xyz pqr'
- 1: '
- 2: abcd xyz pqr
- /(Z()|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2:
- /(Z(())|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- 2:
- 3:
- /((?>Z)+|A)*/
- ZABCDEFG
- 0: ZA
- 1: A
- /((?>)+|A)*/
- ZABCDEFG
- 0:
- 1:
- /a*/g
- abbab
- 0: a
- 0:
- 0:
- 0: a
- 0:
- 0:
- /[[:space:]]+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d\x0b
-
- /[[:blank:]]+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09
-
- /[\s]+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d\x0b
-
- /\s+/
- > \x09\x0a\x0c\x0d\x0b<
- 0: \x09\x0a\x0c\x0d\x0b
-
- /ab/x
- ab
- 0: ab
- /(?!\A)x/m
- a\nxb\n
- 0: x
- /(?!^)x/m
- \= Expect no match
- a\nxb\n
- No match
- /abc\Qabc\Eabc/
- abcabcabc
- 0: abcabcabc
-
- /abc\Q(*+|\Eabc/
- abc(*+|abc
- 0: abc(*+|abc
- / abc\Q abc\Eabc/x
- abc abcabc
- 0: abc abcabc
- \= Expect no match
- abcabcabc
- No match
-
- /abc#comment
- \Q#not comment
- literal\E/x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
- /abc#comment
- \Q#not comment
- literal/x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
- /abc#comment
- \Q#not comment
- literal\E #more comment
- /x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
- /abc#comment
- \Q#not comment
- literal\E #more comment/x
- abc#not comment\n literal
- 0: abc#not comment\x0a literal
- /\Qabc\$xyz\E/
- abc\\\$xyz
- 0: abc\$xyz
- /\Qabc\E\$\Qxyz\E/
- abc\$xyz
- 0: abc$xyz
- /\Gabc/
- abc
- 0: abc
- \= Expect no match
- xyzabc
- No match
- /\Gabc./g
- abc1abc2xyzabc3
- 0: abc1
- 0: abc2
- /abc./g
- abc1abc2xyzabc3
- 0: abc1
- 0: abc2
- 0: abc3
- /a(?x: b c )d/
- XabcdY
- 0: abcd
- \= Expect no match
- Xa b c d Y
- No match
- /((?x)x y z | a b c)/
- XabcY
- 0: abc
- 1: abc
- AxyzB
- 0: xyz
- 1: xyz
- /(?i)AB(?-i)C/
- XabCY
- 0: abC
- \= Expect no match
- XabcY
- No match
- /((?i)AB(?-i)C|D)E/
- abCE
- 0: abCE
- 1: abC
- DE
- 0: DE
- 1: D
- \= Expect no match
- abcE
- No match
- abCe
- No match
- dE
- No match
- De
- No match
- /(.*)\d+\1/
- abc123abc
- 0: abc123abc
- 1: abc
- abc123bc
- 0: bc123bc
- 1: bc
- /(.*)\d+\1/s
- abc123abc
- 0: abc123abc
- 1: abc
- abc123bc
- 0: bc123bc
- 1: bc
-
- /((.*))\d+\1/
- abc123abc
- 0: abc123abc
- 1: abc
- 2: abc
- abc123bc
- 0: bc123bc
- 1: bc
- 2: bc
- # This tests for an IPv6 address in the form where it can have up to
- # eight components, one and only one of which is empty. This must be
- # an internal component.
- /^(?!:) # colon disallowed at start
- (?: # start of item
- (?: [0-9a-f]{1,4} | # 1-4 hex digits or
- (?(1)0 | () ) ) # if null previously matched, fail; else null
- : # followed by colon
- ){1,7} # end item; 1-7 of them required
- [0-9a-f]{1,4} $ # final hex number at end of string
- (?(1)|.) # check that there was an empty component
- /ix
- a123::a123
- 0: a123::a123
- 1:
- a123:b342::abcd
- 0: a123:b342::abcd
- 1:
- a123:b342::324e:abcd
- 0: a123:b342::324e:abcd
- 1:
- a123:ddde:b342::324e:abcd
- 0: a123:ddde:b342::324e:abcd
- 1:
- a123:ddde:b342::324e:dcba:abcd
- 0: a123:ddde:b342::324e:dcba:abcd
- 1:
- a123:ddde:9999:b342::324e:dcba:abcd
- 0: a123:ddde:9999:b342::324e:dcba:abcd
- 1:
- \= Expect no match
- 1:2:3:4:5:6:7:8
- No match
- a123:bce:ddde:9999:b342::324e:dcba:abcd
- No match
- a123::9999:b342::324e:dcba:abcd
- No match
- abcde:2:3:4:5:6:7:8
- No match
- ::1
- No match
- abcd:fee0:123::
- No match
- :1
- No match
- 1:
- No match
- /[z\Qa-d]\E]/
- z
- 0: z
- a
- 0: a
- -
- 0: -
- d
- 0: d
- ]
- 0: ]
- \= Expect no match
- b
- No match
- /(a+)*b/
- \= Expect no match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- No match
-
- /(?i)reg(?:ul(?:[aä]|ae)r|ex)/
- REGular
- 0: REGular
- regulaer
- 0: regulaer
- Regex
- 0: Regex
- regulär
- 0: regul\xe4r
- /Åæåä[à-ÿÀ-ß]+/
- Åæåäà
- 0: \xc5\xe6\xe5\xe4\xe0
- Åæåäÿ
- 0: \xc5\xe6\xe5\xe4\xff
- ÅæåäÀ
- 0: \xc5\xe6\xe5\xe4\xc0
- Åæåäß
- 0: \xc5\xe6\xe5\xe4\xdf
- /(?<=Z)X./
- \x84XAZXB
- 0: XB
- /ab cd (?x) de fg/
- ab cd defg
- 0: ab cd defg
- /ab cd(?x) de fg/
- ab cddefg
- 0: ab cddefg
- \= Expect no match
- abcddefg
- No match
- /(?<![^f]oo)(bar)/
- foobarX
- 0: bar
- 1: bar
- \= Expect no match
- boobarX
- No match
- /(?<![^f])X/
- offX
- 0: X
- \= Expect no match
- onyX
- No match
- /(?<=[^f])X/
- onyX
- 0: X
- \= Expect no match
- offX
- No match
- /^/gm
- a\nb\nc\n
- 0:
- 0:
- 0:
- \
- 0:
-
- /(?<=C\n)^/gm
- A\nC\nC\n
- 0:
- /(?:(?(1)a|b)(X))+/
- bXaX
- 0: bXaX
- 1: X
- /(?:(?(1)\1a|b)(X|Y))+/
- bXXaYYaY
- 0: bXXaYYaY
- 1: Y
- bXYaXXaX
- 0: bX
- 1: X
- /()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
- bXXaYYaY
- 0: bX
- 1:
- 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
- 9:
- 10: X
- /[[,abc,]+]/
- abc]
- 0: abc]
- a,b]
- 0: a,b]
- [a,b,c]
- 0: [a,b,c]
- /(?-x: )/x
- A\x20B
- 0:
-
- /(?x)(?-x: \s*#\s*)/
- A # B
- 0: #
- \= Expect no match
- #
- No match
- A s#s B
- No match
- /(?x-is)(?:(?-ixs) \s*#\s*) include/
- A #include
- 0: #include
- \= Expect no match
- A#include
- No match
- A #Include
- No match
- /a*b*\w/
- aaabbbb
- 0: aaabbbb
- aaaa
- 0: aaaa
- a
- 0: a
- /a*b?\w/
- aaabbbb
- 0: aaabb
- aaaa
- 0: aaaa
- a
- 0: a
- /a*b{0,4}\w/
- aaabbbb
- 0: aaabbbb
- aaaa
- 0: aaaa
- a
- 0: a
- /a*b{0,}\w/
- aaabbbb
- 0: aaabbbb
- aaaa
- 0: aaaa
- a
- 0: a
-
- /a*\d*\w/
- 0a
- 0: 0a
- a
- 0: a
-
- /a*b *\w/x
- a
- 0: a
- /a*b#comment
- *\w/x
- a
- 0: a
- /a* b *\w/x
- a
- 0: a
- /^\w+=.*(\\\n.*)*/
- abc=xyz\\\npqr
- 0: abc=xyz\
- /(?=(\w+))\1:/
- abcd:
- 0: abcd:
- 1: abcd
- /^(?=(\w+))\1:/
- abcd:
- 0: abcd:
- 1: abcd
- /^\Eabc/
- abc
- 0: abc
-
- /^[\Eabc]/
- a
- 0: a
- \= Expect no match
- E
- No match
-
- /^[a-\Ec]/
- b
- 0: b
- \= Expect no match
- -
- No match
- E
- No match
- /^[a\E\E-\Ec]/
- b
- 0: b
- \= Expect no match
- -
- No match
- E
- No match
- /^[\E\Qa\E-\Qz\E]+/
- b
- 0: b
- \= Expect no match
- -
- No match
-
- /^[a\Q]bc\E]/
- a
- 0: a
- ]
- 0: ]
- c
- 0: c
-
- /^[a-\Q\E]/
- a
- 0: a
- -
- 0: -
- /^(a()*)*/
- aaaa
- 0: aaaa
- 1: a
- 2:
- /^(?:a(?:(?:))*)*/
- aaaa
- 0: aaaa
- /^(a()+)+/
- aaaa
- 0: aaaa
- 1: a
- 2:
- /^(?:a(?:(?:))+)+/
- aaaa
- 0: aaaa
- /(a){0,3}(?(1)b|(c|))*D/
- abbD
- 0: abbD
- 1: a
- ccccD
- 0: ccccD
- 1: <unset>
- 2:
- D
- 0: D
- 1: <unset>
- 2:
- /(a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- 1:
- \= Expect no match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- No match
- /(?>a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- \= Expect no match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- No match
- /(?:a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
- \= Expect no match
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- No match
- /\Z/g
- abc\n
- 0:
- 0:
-
- /^(?s)(?>.*)(?<!\n)/
- abc
- 0: abc
- \= Expect no match
- abc\n
- No match
- /^(?![^\n]*\n\z)/
- abc
- 0:
- \= Expect no match
- abc\n
- No match
-
- /\z(?<!\n)/
- abc
- 0:
- \= Expect no match
- abc\n
- No match
- /(.*(.)?)*/
- abcd
- 0: abcd
- 1:
- /( (A | (?(1)0|) )* )/x
- abcd
- 0:
- 1:
- 2:
- /( ( (?(1)0|) )* )/x
- abcd
- 0:
- 1:
- 2:
- /( (?(1)0|)* )/x
- abcd
- 0:
- 1:
- /[[:abcd:xyz]]/
- a]
- 0: a]
- :]
- 0: :]
-
- /[abc[:x\]pqr]/
- a
- 0: a
- [
- 0: [
- :
- 0: :
- ]
- 0: ]
- p
- 0: p
- /.*[op][xyz]/
- \= Expect no match
- fooabcfoo
- No match
- /(?(?=.*b)b|^)/
- adc
- 0:
- abc
- 0: b
- /(?(?=^.*b)b|^)/
- adc
- 0:
- \= Expect no match
- abc
- No match
- /(?(?=.*b)b|^)*/
- adc
- 0:
- abc
- 0:
- /(?(?=.*b)b|^)+/
- adc
- 0:
- abc
- 0: b
- /(?(?=b).*b|^d)/
- abc
- 0: b
- /(?(?=.*b).*b|^d)/
- abc
- 0: ab
- /^%((?(?=[a])[^%])|b)*%$/
- %ab%
- 0: %ab%
- 1:
- /(?i)a(?-i)b|c/
- XabX
- 0: ab
- XAbX
- 0: Ab
- CcC
- 0: c
- \= Expect no match
- XABX
- No match
- /[\x00-\xff\s]+/
- \x0a\x0b\x0c\x0d
- 0: \x0a\x0b\x0c\x0d
- /(abc)\1/i
- \= Expect no match
- abc
- No match
- /(abc)\1/
- \= Expect no match
- abc
- No match
- /[^a]*/i
- 12abc
- 0: 12
- 12ABC
- 0: 12
- /[^a]*+/i
- 12abc
- 0: 12
- 12ABC
- 0: 12
- /[^a]*?X/i
- \= Expect no match
- 12abc
- No match
- 12ABC
- No match
-
- /[^a]+?X/i
- \= Expect no match
- 12abc
- No match
- 12ABC
- No match
- /[^a]?X/i
- 12aXbcX
- 0: X
- 12AXBCX
- 0: X
- BCX
- 0: CX
- /[^a]??X/i
- 12aXbcX
- 0: X
- 12AXBCX
- 0: X
- BCX
- 0: CX
-
- /[^a]?+X/i
- 12aXbcX
- 0: cX
- 12AXBCX
- 0: CX
- BCX
- 0: CX
- /[^a]{2,3}/i
- abcdef
- 0: bcd
- ABCDEF
- 0: BCD
- /[^a]{2,3}?/i
- abcdef
- 0: bc
- ABCDEF
- 0: BC
- /[^a]{2,3}+/i
- abcdef
- 0: bcd
- ABCDEF
- 0: BCD
- /((a|)+)+Z/
- Z
- 0: Z
- 1:
- 2:
- /(a)b|(a)c/
- ac
- 0: ac
- 1: <unset>
- 2: a
- /(?>(a))b|(a)c/
- ac
- 0: ac
- 1: <unset>
- 2: a
- /(?=(a))ab|(a)c/
- ac
- 0: ac
- 1: <unset>
- 2: a
- /((?>(a))b|(a)c)/
- ac
- 0: ac
- 1: ac
- 2: <unset>
- 3: a
- /((?>(a))b|(a)c)++/
- ac
- 0: ac
- 1: ac
- 2: <unset>
- 3: a
- /(?:(?>(a))b|(a)c)++/
- ac
- 0: ac
- 1: <unset>
- 2: a
- /(?=(?>(a))b|(a)c)(..)/
- ac
- 0: ac
- 1: <unset>
- 2: a
- 3: ac
- /(?>(?>(a))b|(a)c)/
- ac
- 0: ac
- 1: <unset>
- 2: a
- /(?:(?>([ab])))+a=/aftertext
- =ba=
- 0: ba=
- 0+
- 1: b
- /(?>([ab]))+a=/aftertext
- =ba=
- 0: ba=
- 0+
- 1: b
- /((?>(a+)b)+(aabab))/
- aaaabaaabaabab
- 0: aaaabaaabaabab
- 1: aaaabaaabaabab
- 2: aaa
- 3: aabab
- /(?>a+|ab)+?c/
- \= Expect no match
- aabc
- No match
- /(?>a+|ab)+c/
- \= Expect no match
- aabc
- No match
- /(?:a+|ab)+c/
- aabc
- 0: aabc
- /(?(?=(a))a)/
- a
- 0: a
- 1: a
- /(?(?=(a))a)(b)/
- ab
- 0: ab
- 1: a
- 2: b
- /^(?:a|ab)++c/
- \= Expect no match
- aaaabc
- No match
- /^(?>a|ab)++c/
- \= Expect no match
- aaaabc
- No match
- /^(?:a|ab)+c/
- aaaabc
- 0: aaaabc
- /(?=abc){3}abc/aftertext
- abcabcabc
- 0: abc
- 0+ abcabc
- \= Expect no match
- xyz
- No match
-
- /(?=abc)+abc/aftertext
- abcabcabc
- 0: abc
- 0+ abcabc
- \= Expect no match
- xyz
- No match
-
- /(?=abc)++abc/aftertext
- abcabcabc
- 0: abc
- 0+ abcabc
- \= Expect no match
- xyz
- No match
-
- /(?=abc){0}xyz/
- xyz
- 0: xyz
- /(?=abc){1}xyz/
- \= Expect no match
- xyz
- No match
-
- /(?=(a))?./
- ab
- 0: a
- 1: a
- bc
- 0: b
-
- /(?=(a))??./
- ab
- 0: a
- bc
- 0: b
- /^(?=(?1))?[az]([abc])d/
- abd
- 0: abd
- 1: b
- zcdxx
- 0: zcd
- 1: c
- /^(?!a){0}\w+/
- aaaaa
- 0: aaaaa
- /(?<=(abc))?xyz/
- abcxyz
- 0: xyz
- 1: abc
- pqrxyz
- 0: xyz
- /^[\g<a>]+/
- ggg<<<aaa>>>
- 0: ggg<<<aaa>>>
- \= Expect no match
- \\ga
- No match
-
- /^[\ga]+/
- gggagagaxyz
- 0: gggagaga
-
- /^[:a[:digit:]]+/
- aaaa444:::Z
- 0: aaaa444:::
- /^[:a[:digit:]:b]+/
- aaaa444:::bbbZ
- 0: aaaa444:::bbb
- /[:a]xxx[b:]/
- :xxx:
- 0: :xxx:
-
- /(?<=a{2})b/i
- xaabc
- 0: b
- \= Expect no match
- xabc
- No match
- /(?<!a{2})b/i
- xabc
- 0: b
- \= Expect no match
- xaabc
- No match
- /(?<=a\h)c/
- xa c
- 0: c
-
- /(?<=[^a]{2})b/
- axxbc
- 0: b
- aAAbc
- 0: b
- \= Expect no match
- xaabc
- No match
- /(?<=[^a]{2})b/i
- axxbc
- 0: b
- \= Expect no match
- aAAbc
- No match
- xaabc
- No match
- /(?<=a\H)c/
- abc
- 0: c
- /(?<=a\V)c/
- abc
- 0: c
-
- /(?<=a\v)c/
- a\nc
- 0: c
- /(?(?=c)c|d)++Y/
- XcccddYX
- 0: cccddY
- /(?(?=c)c|d)*+Y/
- XcccddYX
- 0: cccddY
- /^(a{2,3}){2,}+a/
- aaaaaaa
- 0: aaaaaaa
- 1: aaa
- \= Expect no match
- aaaaaa
- No match
- aaaaaaaaa
- No match
- /^(a{2,3})++a/
- \= Expect no match
- aaaaaa
- No match
- /^(a{2,3})*+a/
- \= Expect no match
- aaaaaa
- No match
- /\H\h\V\v/
- X X\x0a
- 0: X X\x0a
- X\x09X\x0b
- 0: X\x09X\x0b
- \= Expect no match
- \xa0 X\x0a
- No match
-
- /\H*\h+\V?\v{3,4}/
- \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
- 0: \x09 \xa0X\x0a\x0b\x0c\x0d
- \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
- 0: \x09 \xa0\x0a\x0b\x0c\x0d
- \x09\x20\xa0\x0a\x0b\x0c
- 0: \x09 \xa0\x0a\x0b\x0c
- \= Expect no match
- \x09\x20\xa0\x0a\x0b
- No match
-
- /\H{3,4}/
- XY ABCDE
- 0: ABCD
- XY PQR ST
- 0: PQR
-
- /.\h{3,4}./
- XY AB PQRS
- 0: B P
- /\h*X\h?\H+Y\H?Z/
- >XNNNYZ
- 0: XNNNYZ
- > X NYQZ
- 0: X NYQZ
- \= Expect no match
- >XYZ
- No match
- > X NY Z
- No match
- /\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
- >XY\x0aZ\x0aA\x0bNN\x0c
- 0: XY\x0aZ\x0aA\x0bNN\x0c
- >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
- 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
- /(foo)\Kbar/
- foobar
- 0: bar
- 1: foo
-
- /(foo)(\Kbar|baz)/
- foobar
- 0: bar
- 1: foo
- 2: bar
- foobaz
- 0: foobaz
- 1: foo
- 2: baz
- /(foo\Kbar)baz/
- foobarbaz
- 0: barbaz
- 1: foobar
- /abc\K|def\K/g,aftertext
- Xabcdefghi
- 0:
- 0+ defghi
- 0:
- 0+ ghi
- /ab\Kc|de\Kf/g,aftertext
- Xabcdefghi
- 0: c
- 0+ defghi
- 0: f
- 0+ ghi
-
- /(?=C)/g,aftertext
- ABCDECBA
- 0:
- 0+ CDECBA
- 0:
- 0+ CBA
-
- /^abc\K/aftertext
- abcdef
- 0:
- 0+ def
- \= Expect no match
- defabcxyz
- No match
- /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-2}Z/
- ababababbbabZXXXX
- 0: ababababbbabZ
- 1: ab
- 2: b
- /(?<A>tom|bon)-\g{A}/
- tom-tom
- 0: tom-tom
- 1: tom
- bon-bon
- 0: bon-bon
- 1: bon
-
- /(^(a|b\g{-1}))/
- \= Expect no match
- bacxxx
- No match
- /(?|(abc)|(xyz))\1/
- abcabc
- 0: abcabc
- 1: abc
- xyzxyz
- 0: xyzxyz
- 1: xyz
- \= Expect no match
- abcxyz
- No match
- xyzabc
- No match
-
- /(?|(abc)|(xyz))(?1)/
- abcabc
- 0: abcabc
- 1: abc
- xyzabc
- 0: xyzabc
- 1: xyz
- \= Expect no match
- xyzxyz
- No match
-
- /^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
- XYabcdY
- 0: XYabcdY
- 1: a
- 2: b
- 3: c
- 4: d
- 5: Y
- /^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
- XYabcdY
- 0: XYabcdY
- 1: a
- 2: b
- 3: <unset>
- 4: <unset>
- 5: c
- 6: d
- 7: Y
- /^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
- XYabcdY
- 0: XYabcdY
- 1: a
- 2: b
- 3: <unset>
- 4: <unset>
- 5: c
- 6: d
- 7: Y
- /(?'abc'\w+):\k<abc>{2}/
- a:aaxyz
- 0: a:aa
- 1: a
- ab:ababxyz
- 0: ab:abab
- 1: ab
- \= Expect no match
- a:axyz
- No match
- ab:abxyz
- No match
- /(?'abc'\w+):\g{abc}{2}/
- a:aaxyz
- 0: a:aa
- 1: a
- ab:ababxyz
- 0: ab:abab
- 1: ab
- \= Expect no match
- a:axyz
- No match
- ab:abxyz
- No match
- /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
- abd
- 0: abd
- 1: a
- ce
- 0: ce
- /^(a.)\g-1Z/
- aXaXZ
- 0: aXaXZ
- 1: aX
- /^(a.)\g{-1}Z/
- aXaXZ
- 0: aXaXZ
- 1: aX
- /^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x
- abcd
- 0: ab
- /(?<all>(?:(?:a(?&all))|(b))(c?))/
- aabc
- 0: aabc
- 1: aabc
- 2: <unset>
- 3:
-
- /(a(b)|(c))(?1)/
- abc
- 0: abc
- 1: ab
- 2: b
- cab
- 0: cab
- 1: c
- 2: <unset>
- 3: c
- /(?1)(a(b)|(c))/
- abc
- 0: abc
- 1: c
- 2: <unset>
- 3: c
- cab
- 0: cab
- 1: ab
- 2: b
- /(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
- (?(DEFINE)
- (?<NAME_PAT>[a-z]+)
- (?<ADDRESS_PAT>\d+)
- )/x
- metcalfe 33
- 0: metcalfe 33
- 1: metcalfe
- 2: 33
- /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
- 1.2.3.4
- 0: 1.2.3.4
- 1: <unset>
- 2: .4
- 131.111.10.206
- 0: 131.111.10.206
- 1: <unset>
- 2: .206
- 10.0.0.0
- 0: 10.0.0.0
- 1: <unset>
- 2: .0
- \= Expect no match
- 10.6
- No match
- 455.3.4.5
- No match
- /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
- 1.2.3.4
- 0: 1.2.3.4
- 1: .4
- 131.111.10.206
- 0: 131.111.10.206
- 1: .206
- 10.0.0.0
- 0: 10.0.0.0
- 1: .0
- \= Expect no match
- 10.6
- No match
- 455.3.4.5
- No match
- /^(\w++|\s++)*$/
- now is the time for all good men to come to the aid of the party
- 0: now is the time for all good men to come to the aid of the party
- 1: party
- \= Expect no match
- this is not a line with only words and spaces!
- No match
- /(\d++)(\w)/
- 12345a
- 0: 12345a
- 1: 12345
- 2: a
- \= Expect no match
- 12345+
- No match
- /a++b/
- aaab
- 0: aaab
- /(a++b)/
- aaab
- 0: aaab
- 1: aaab
- /(a++)b/
- aaab
- 0: aaab
- 1: aaa
- /([^()]++|\([^()]*\))+/
- ((abc(ade)ufh()()x
- 0: abc(ade)ufh()()x
- 1: x
- /\(([^()]++|\([^()]+\))+\)/
- (abc)
- 0: (abc)
- 1: abc
- (abc(def)xyz)
- 0: (abc(def)xyz)
- 1: xyz
- \= Expect no match
- ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- No match
- /^([^()]|\((?1)*\))*$/
- abc
- 0: abc
- 1: c
- a(b)c
- 0: a(b)c
- 1: c
- a(b(c))d
- 0: a(b(c))d
- 1: d
- \= Expect no match)
- a(b(c)d
- No match
- /^>abc>([^()]|\((?1)*\))*<xyz<$/
- >abc>123<xyz<
- 0: >abc>123<xyz<
- 1: 3
- >abc>1(2)3<xyz<
- 0: >abc>1(2)3<xyz<
- 1: 3
- >abc>(1(2)3)<xyz<
- 0: >abc>(1(2)3)<xyz<
- 1: (1(2)3)
- /^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
- 1221
- 0: 1221
- 1: 1221
- 2: 1
- Satanoscillatemymetallicsonatas
- 0: Satanoscillatemymetallicsonatas
- 1: <unset>
- 2: <unset>
- 3: Satanoscillatemymetallicsonatas
- 4: S
- AmanaplanacanalPanama
- 0: AmanaplanacanalPanama
- 1: <unset>
- 2: <unset>
- 3: AmanaplanacanalPanama
- 4: A
- AblewasIereIsawElba
- 0: AblewasIereIsawElba
- 1: <unset>
- 2: <unset>
- 3: AblewasIereIsawElba
- 4: A
- \= Expect no match
- Thequickbrownfox
- No match
- /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
- 12
- 0: 12
- 1: 12
- (((2+2)*-3)-7)
- 0: (((2+2)*-3)-7)
- 1: (((2+2)*-3)-7)
- 2: -
- -12
- 0: -12
- 1: -12
- \= Expect no match
- ((2+2)*-3)-7)
- No match
- /^(x(y|(?1){2})z)/
- xyz
- 0: xyz
- 1: xyz
- 2: y
- xxyzxyzz
- 0: xxyzxyzz
- 1: xxyzxyzz
- 2: xyzxyz
- \= Expect no match
- xxyzz
- No match
- xxyzxyzxyzz
- No match
- /((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
- <>
- 0: <>
- 1: <>
- 2: <>
- <abcd>
- 0: <abcd>
- 1: <abcd>
- 2: <abcd>
- <abc <123> hij>
- 0: <abc <123> hij>
- 1: <abc <123> hij>
- 2: <abc <123> hij>
- <abc <def> hij>
- 0: <def>
- 1: <def>
- 2: <def>
- <abc<>def>
- 0: <abc<>def>
- 1: <abc<>def>
- 2: <abc<>def>
- <abc<>
- 0: <>
- 1: <>
- 2: <>
- \= Expect no match
- <abc
- No match
- /^a+(*FAIL)/
- \= Expect no match
- aaaaaa
- No match
-
- /a+b?c+(*FAIL)/
- \= Expect no match
- aaabccc
- No match
- /a+b?(*PRUNE)c+(*FAIL)/
- \= Expect no match
- aaabccc
- No match
- /a+b?(*COMMIT)c+(*FAIL)/
- \= Expect no match
- aaabccc
- No match
-
- /a+b?(*SKIP)c+(*FAIL)/
- \= Expect no match
- aaabcccaaabccc
- No match
- /^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
- aaaxxxxxx
- 0: aaaxxxxxx
- aaa++++++
- 0: aaa
- bbbxxxxx
- 0: bbbxxxxx
- bbb+++++
- 0: bbb
- cccxxxx
- 0: cccxxxx
- ccc++++
- 0: ccc
- dddddddd
- 0: ddd
- /^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
- aaaxxxxxx
- 0: aaaxxxxxx
- 1: aaaxxxxxx
- aaa++++++
- 0: aaa
- 1: aaa
- bbbxxxxx
- 0: bbbxxxxx
- 1: bbbxxxxx
- bbb+++++
- 0: bbb
- 1: bbb
- cccxxxx
- 0: cccxxxx
- 1: cccxxxx
- ccc++++
- 0: ccc
- 1: ccc
- dddddddd
- 0: ddd
- 1: ddd
- /a+b?(*THEN)c+(*FAIL)/
- \= Expect no match
- aaabccc
- No match
- /(A (A|B(*ACCEPT)|C) D)(E)/x
- AB
- 0: AB
- 1: AB
- 2: B
- ABX
- 0: AB
- 1: AB
- 2: B
- AADE
- 0: AADE
- 1: AAD
- 2: A
- 3: E
- ACDE
- 0: ACDE
- 1: ACD
- 2: C
- 3: E
- \= Expect no match
- AD
- No match
-
- /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
- 1221
- 0: 1221
- 1: 1221
- 2: 1
- Satan, oscillate my metallic sonatas!
- 0: Satan, oscillate my metallic sonatas!
- 1: <unset>
- 2: <unset>
- 3: Satan, oscillate my metallic sonatas
- 4: S
- A man, a plan, a canal: Panama!
- 0: A man, a plan, a canal: Panama!
- 1: <unset>
- 2: <unset>
- 3: A man, a plan, a canal: Panama
- 4: A
- Able was I ere I saw Elba.
- 0: Able was I ere I saw Elba.
- 1: <unset>
- 2: <unset>
- 3: Able was I ere I saw Elba
- 4: A
- \= Expect no match
- The quick brown fox
- No match
- /^((.)(?1)\2|.)$/
- a
- 0: a
- 1: a
- aba
- 0: aba
- 1: aba
- 2: a
- aabaa
- 0: aabaa
- 1: aabaa
- 2: a
- abcdcba
- 0: abcdcba
- 1: abcdcba
- 2: a
- pqaabaaqp
- 0: pqaabaaqp
- 1: pqaabaaqp
- 2: p
- ablewasiereisawelba
- 0: ablewasiereisawelba
- 1: ablewasiereisawelba
- 2: a
- \= Expect no match
- rhubarb
- No match
- the quick brown fox
- No match
- /(a)(?<=b(?1))/
- baz
- 0: a
- 1: a
- \= Expect no match
- caz
- No match
-
- /(?<=b(?1))(a)/
- zbaaz
- 0: a
- 1: a
- \= Expect no match
- aaa
- No match
-
- /(?<X>a)(?<=b(?&X))/
- baz
- 0: a
- 1: a
- /^(?|(abc)|(def))\1/
- abcabc
- 0: abcabc
- 1: abc
- defdef
- 0: defdef
- 1: def
- \= Expect no match
- abcdef
- No match
- defabc
- No match
-
- /^(?|(abc)|(def))(?1)/
- abcabc
- 0: abcabc
- 1: abc
- defabc
- 0: defabc
- 1: def
- \= Expect no match
- defdef
- No match
- abcdef
- No match
- /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/x,dupnames
- a\"aaaaa
- 0: a"aaaaa
- 1: "
- 2: <unset>
- 3: "
- b\"aaaaa
- 0: b"aaaaa
- 1: <unset>
- 2: <unset>
- 3: <unset>
- 4: "
- 5: <unset>
- 6: "
- \= Expect no match
- b\"11111
- No match
- /(?:(?1)|B)(A(*F)|C)/
- ABCD
- 0: BC
- 1: C
- CCD
- 0: CC
- 1: C
- \= Expect no match
- CAD
- No match
- /^(?:(?1)|B)(A(*F)|C)/
- CCD
- 0: CC
- 1: C
- BCD
- 0: BC
- 1: C
- \= Expect no match
- ABCD
- No match
- CAD
- No match
- BAD
- No match
- /(?:(?1)|B)(A(*ACCEPT)XX|C)D/
- AAD
- 0: AA
- 1: A
- ACD
- 0: ACD
- 1: C
- BAD
- 0: BA
- 1: A
- BCD
- 0: BCD
- 1: C
- BAX
- 0: BA
- 1: A
- \= Expect no match
- ACX
- No match
- ABC
- No match
- /(?(DEFINE)(A))B(?1)C/
- BAC
- 0: BAC
- /(?(DEFINE)((A)\2))B(?1)C/
- BAAC
- 0: BAAC
- /(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
- (ab(cd)ef)
- 0: (ab(cd)ef)
- 1: (ab(cd)ef)
- 2: ef
- /^(?=a(*SKIP)b|ac)/
- \= Expect no match
- ac
- No match
-
- /^(?=a(*PRUNE)b)/
- ab
- 0:
- \= Expect no match
- ac
- No match
- /^(?=a(*ACCEPT)b)/
- ac
- 0:
- /(?>a\Kb)/
- ab
- 0: b
- /((?>a\Kb))/
- ab
- 0: b
- 1: ab
- /(a\Kb)/
- ab
- 0: b
- 1: ab
-
- /^a\Kcz|ac/
- ac
- 0: ac
-
- /(?>a\Kbz|ab)/
- ab
- 0: ab
- /^(?&t)(?(DEFINE)(?<t>a\Kb))$/
- ab
- 0: b
- /^([^()]|\((?1)*\))*$/
- a(b)c
- 0: a(b)c
- 1: c
- a(b(c)d)e
- 0: a(b(c)d)e
- 1: e
- /(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
- 0
- 0: 0
- 1: 0
- 00
- 0: 00
- 1: 00
- 2: 0
- 0000
- 0: 0000
- 1: 0000
- 2: 0
- /(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
- 0
- 0: 0
- 1: 0
- 2: 0
- 00
- 0: 0
- 1: 0
- 2: 0
- 0000
- 0: 0
- 1: 0
- 2: 0
- # This one does fail, as expected, in Perl. It needs the complex item at the
- # end of the pattern. A single letter instead of (B|D) makes it not fail, which
- # I think is a Perl bug.
- /A(*COMMIT)(B|D)/
- \= Expect no match
- ACABX
- No match
- # Check the use of names for failure
- /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark
- \= Expect no match
- AC
- No match, mark = A
- CB
- No match, mark = B
-
- /(*MARK:A)(*SKIP:B)(C|X)/mark
- C
- 0: C
- 1: C
- MK: A
- \= Expect no match
- D
- No match, mark = A
-
- /^(A(*THEN:A)B|C(*THEN:B)D)/mark
- \= Expect no match
- CB
- No match, mark = B
- /^(?:A(*THEN:A)B|C(*THEN:B)D)/mark
- \= Expect no match
- CB
- No match, mark = B
-
- /^(?>A(*THEN:A)B|C(*THEN:B)D)/mark
- \= Expect no match
- CB
- No match, mark = B
-
- # This should succeed, as the skip causes bump to offset 1 (the mark). Note
- # that we have to have something complicated such as (B|Z) at the end because,
- # for Perl, a simple character somehow causes an unwanted optimization to mess
- # with the handling of backtracking verbs.
- /A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/x,mark
- AAAC
- 0: AC
-
- # Test skipping over a non-matching mark.
- /A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/x,mark
- AAAC
- 0: AC
-
- # Check shorthand for MARK.
- /A(*:A)A+(*SKIP:A)(B|Z) | AC/x,mark
- AAAC
- 0: AC
- /(*:A)A+(*SKIP:A)(B|Z)/mark
- \= Expect no match
- AAAC
- No match, mark = A
- # This should succeed, as a non-existent skip name disables the skip.
- /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark
- AAAC
- 0: AC
- /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/x,mark
- AAAC
- 0: AC
- MK: B
- # COMMIT at the start of a pattern should act like an anchor. Again, however,
- # we need the complication for Perl.
- /(*COMMIT)(A|P)(B|P)(C|P)/
- ABCDEFG
- 0: ABC
- 1: A
- 2: B
- 3: C
- \= Expect no match
- DEFGABC
- No match
- # COMMIT inside an atomic group can't stop backtracking over the group.
- /(\w+)(?>b(*COMMIT))\w{2}/
- abbb
- 0: abbb
- 1: a
- /(\w+)b(*COMMIT)\w{2}/
- \= Expect no match
- abbb
- No match
- # Check opening parens in comment when seeking forward reference.
- /(?&t)(?#()(?(DEFINE)(?<t>a))/
- bac
- 0: a
- # COMMIT should override THEN.
- /(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
- \= Expect no match
- yes
- No match
- /(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
- \= Expect no match
- yes
- No match
- /b?(*SKIP)c/
- bc
- 0: bc
- abc
- 0: bc
-
- /(*SKIP)bc/
- \= Expect no match
- a
- No match
- /(*SKIP)b/
- \= Expect no match
- a
- No match
- /(?P<abn>(?P=abn)xxx|)+/
- xxx
- 0:
- 1:
- /(?i:([^b]))(?1)/
- aa
- 0: aa
- 1: a
- aA
- 0: aA
- 1: a
- \= Expect no match
- ab
- No match
- aB
- No match
- Ba
- No match
- ba
- No match
- /^(?&t)*+(?(DEFINE)(?<t>a))\w$/
- aaaaaaX
- 0: aaaaaaX
- \= Expect no match
- aaaaaa
- No match
- /^(?&t)*(?(DEFINE)(?<t>a))\w$/
- aaaaaaX
- 0: aaaaaaX
- aaaaaa
- 0: aaaaaa
- /^(a)*+(\w)/
- aaaaX
- 0: aaaaX
- 1: a
- 2: X
- YZ
- 0: Y
- 1: <unset>
- 2: Y
- \= Expect no match
- aaaa
- No match
- /^(?:a)*+(\w)/
- aaaaX
- 0: aaaaX
- 1: X
- YZ
- 0: Y
- 1: Y
- \= Expect no match
- aaaa
- No match
- /^(a)++(\w)/
- aaaaX
- 0: aaaaX
- 1: a
- 2: X
- \= Expect no match
- aaaa
- No match
- YZ
- No match
- /^(?:a)++(\w)/
- aaaaX
- 0: aaaaX
- 1: X
- \= Expect no match
- aaaa
- No match
- YZ
- No match
- /^(a)?+(\w)/
- aaaaX
- 0: aa
- 1: a
- 2: a
- YZ
- 0: Y
- 1: <unset>
- 2: Y
- /^(?:a)?+(\w)/
- aaaaX
- 0: aa
- 1: a
- YZ
- 0: Y
- 1: Y
- /^(a){2,}+(\w)/
- aaaaX
- 0: aaaaX
- 1: a
- 2: X
- \= Expect no match
- aaa
- No match
- YZ
- No match
- /^(?:a){2,}+(\w)/
- aaaaX
- 0: aaaaX
- 1: X
- \= Expect no match
- aaa
- No match
- YZ
- No match
- /(a|)*(?1)b/
- b
- 0: b
- 1:
- ab
- 0: ab
- 1:
- aab
- 0: aab
- 1:
- /(a)++(?1)b/
- \= Expect no match
- ab
- No match
- aab
- No match
- /(a)*+(?1)b/
- \= Expect no match
- ab
- No match
- aab
- No match
- /(?1)(?:(b)){0}/
- b
- 0: b
- /(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
- foo(bar(baz)+baz(bop))
- 0: foo(bar(baz)+baz(bop))
- 1: foo(bar(baz)+baz(bop))
- 2: (bar(baz)+baz(bop))
- 3: bar(baz)+baz(bop)
- /(A (A|B(*ACCEPT)|C) D)(E)/x
- AB
- 0: AB
- 1: AB
- 2: B
- /\A.*?(a|bc)/
- ba
- 0: ba
- 1: a
- /\A.*?(?:a|bc)++/
- ba
- 0: ba
- /\A.*?(a|bc)++/
- ba
- 0: ba
- 1: a
- /\A.*?(?:a|bc|d)/
- ba
- 0: ba
- /(?:(b))++/
- beetle
- 0: b
- 1: b
- /(?(?=(a(*ACCEPT)z))a)/
- a
- 0: a
- 1: a
- /^(a)(?1)+ab/
- aaaab
- 0: aaaab
- 1: a
-
- /^(a)(?1)++ab/
- \= Expect no match
- aaaab
- No match
- /^(?=a(*:M))aZ/mark
- aZbc
- 0: aZ
- MK: M
- /^(?!(*:M)b)aZ/mark
- aZbc
- 0: aZ
- /(?(DEFINE)(a))?b(?1)/
- backgammon
- 0: ba
- /^\N+/
- abc\ndef
- 0: abc
-
- /^\N{1,}/
- abc\ndef
- 0: abc
- /(?(R)a+|(?R)b)/
- aaaabcde
- 0: aaaab
- /(?(R)a+|((?R))b)/
- aaaabcde
- 0: aaaab
- 1: aaaa
- /((?(R)a+|(?1)b))/
- aaaabcde
- 0: aaaab
- 1: aaaab
- /((?(R1)a+|(?1)b))/
- aaaabcde
- 0: aaaab
- 1: aaaab
-
- /((?(R)a|(?1)))*/
- aaa
- 0: aaa
- 1: a
- /((?(R)a|(?1)))+/
- aaa
- 0: aaa
- 1: a
- /a(*:any
- name)/mark
- abc
- 0: a
- MK: any \x0aname
-
- /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
- a
- 0: a
- ba
- 0: a
- bba
- 0: a
-
- # Checking revised (*THEN) handling.
- # Capture
- /^.*? (a(*THEN)b) c/x
- \= Expect no match
- aabc
- No match
- /^.*? (a(*THEN)b|(*F)) c/x
- aabc
- 0: aabc
- 1: ab
- /^.*? ( (a(*THEN)b) | (*F) ) c/x
- aabc
- 0: aabc
- 1: ab
- 2: ab
- /^.*? ( (a(*THEN)b) ) c/x
- \= Expect no match
- aabc
- No match
- # Non-capture
- /^.*? (?:a(*THEN)b) c/x
- \= Expect no match
- aabc
- No match
- /^.*? (?:a(*THEN)b|(*F)) c/x
- aabc
- 0: aabc
- /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
- aabc
- 0: aabc
- /^.*? (?: (?:a(*THEN)b) ) c/x
- \= Expect no match
- aabc
- No match
- # Atomic
- /^.*? (?>a(*THEN)b) c/x
- \= Expect no match
- aabc
- No match
- /^.*? (?>a(*THEN)b|(*F)) c/x
- aabc
- 0: aabc
- /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
- aabc
- 0: aabc
- /^.*? (?> (?>a(*THEN)b) ) c/x
- \= Expect no match
- aabc
- No match
- # Possessive capture
- /^.*? (a(*THEN)b)++ c/x
- \= Expect no match
- aabc
- No match
- /^.*? (a(*THEN)b|(*F))++ c/x
- aabc
- 0: aabc
- 1: ab
- /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
- aabc
- 0: aabc
- 1: ab
- 2: ab
- /^.*? ( (a(*THEN)b)++ )++ c/x
- \= Expect no match
- aabc
- No match
- # Possessive non-capture
- /^.*? (?:a(*THEN)b)++ c/x
- \= Expect no match
- aabc
- No match
- /^.*? (?:a(*THEN)b|(*F))++ c/x
- aabc
- 0: aabc
- /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
- aabc
- 0: aabc
- /^.*? (?: (?:a(*THEN)b)++ )++ c/x
- \= Expect no match
- aabc
- No match
-
- # Condition assertion
- /^(?(?=a(*THEN)b)ab|ac)/
- ac
- 0: ac
-
- # Condition
- /^.*?(?(?=a)a|b(*THEN)c)/
- \= Expect no match
- ba
- No match
- /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
- ba
- 0: ba
- /^.*?(?(?=a)a(*THEN)b|c)/
- \= Expect no match
- ac
- No match
- # Assertion
- /^.*(?=a(*THEN)b)/
- aabc
- 0: a
- # --------------------------
- /(?>a(*:m))/imsx,mark
- a
- 0: a
- MK: m
- /(?>(a)(*:m))/imsx,mark
- a
- 0: a
- 1: a
- MK: m
- /(?<=a(*ACCEPT)b)c/
- xacd
- 0: c
- /(?<=(a(*ACCEPT)b))c/
- xacd
- 0: c
- 1: a
- /(?<=(a(*COMMIT)b))c/
- xabcd
- 0: c
- 1: ab
- \= Expect no match
- xacd
- No match
-
- /(?<!a(*FAIL)b)c/
- xcd
- 0: c
- acd
- 0: c
- /(?<=a(*:N)b)c/mark
- xabcd
- 0: c
- MK: N
-
- /(?<=a(*PRUNE)b)c/
- xabcd
- 0: c
- /(?<=a(*SKIP)b)c/
- xabcd
- 0: c
- /(?<=a(*THEN)b)c/
- xabcd
- 0: c
- /(a)(?2){2}(.)/
- abcd
- 0: abcd
- 1: a
- 2: d
- /(*MARK:A)(*PRUNE:B)(C|X)/mark
- C
- 0: C
- 1: C
- MK: B
- \= Expect no match
- D
- No match, mark = B
- /(*MARK:A)(*PRUNE:B)(C|X)/mark
- C
- 0: C
- 1: C
- MK: B
- \= Expect no match
- D
- No match, mark = B
- /(*MARK:A)(*THEN:B)(C|X)/mark
- C
- 0: C
- 1: C
- MK: B
- \= Expect no match
- D
- No match, mark = B
- /(*MARK:A)(*THEN:B)(C|X)/mark,no_start_optimize
- C
- 0: C
- 1: C
- MK: B
- \= Expect no match
- D
- No match, mark = B
- /(*MARK:A)(*THEN:B)(C|X)/mark
- C
- 0: C
- 1: C
- MK: B
- \= Expect no match
- D
- No match, mark = B
- # This should fail, as the skip causes a bump to offset 3 (the skip).
- /A(*MARK:A)A+(*SKIP)(B|Z) | AC/x,mark
- \= Expect no match
- AAAC
- No match, mark = A
- # Same
- /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/x,mark
- \= Expect no match
- AAAC
- No match, mark = B
- /A(*:A)A+(*SKIP)(B|Z) | AC/x,mark
- \= Expect no match
- AAAC
- No match, mark = A
- # This should fail, as a null name is the same as no name.
- /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/x,mark
- \= Expect no match
- AAAC
- No match, mark = A
- # A check on what happens after hitting a mark and them bumping along to
- # something that does not even start. Perl reports tags after the failures
- # here, though it does not when the individual letters are made into something
- # more complicated.
- /A(*:A)B|XX(*:B)Y/mark
- AABC
- 0: AB
- MK: A
- XXYZ
- 0: XXY
- MK: B
- \= Expect no match
- XAQQ
- No match, mark = A
- XAQQXZZ
- No match, mark = A
- AXQQQ
- No match, mark = A
- AXXQQQ
- No match, mark = B
-
- /^(A(*THEN:A)B|C(*THEN:B)D)/mark
- AB
- 0: AB
- 1: AB
- MK: A
- CD
- 0: CD
- 1: CD
- MK: B
- \= Expect no match
- AC
- No match, mark = A
- CB
- No match, mark = B
-
- /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark
- AB
- 0: AB
- 1: AB
- MK: A
- CD
- 0: CD
- 1: CD
- MK: B
- \= Expect no match
- AC
- No match, mark = A
- CB
- No match, mark = B
-
- # An empty name does not pass back an empty string. It is the same as if no
- # name were given.
- /^(A(*PRUNE:)B|C(*PRUNE:B)D)/mark
- AB
- 0: AB
- 1: AB
- CD
- 0: CD
- 1: CD
- MK: B
- # PRUNE goes to next bumpalong; COMMIT does not.
-
- /A(*PRUNE:A)B/mark
- ACAB
- 0: AB
- MK: A
- # Mark names can be duplicated.
- /A(*:A)B|X(*:A)Y/mark
- AABC
- 0: AB
- MK: A
- XXYZ
- 0: XY
- MK: A
-
- /b(*:m)f|a(*:n)w/mark
- aw
- 0: aw
- MK: n
- \= Expect no match
- abc
- No match, mark = m
- /b(*:m)f|aw/mark
- abaw
- 0: aw
- \= Expect no match
- abc
- No match, mark = m
- abax
- No match, mark = m
- /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/x,mark
- AAAC
- 0: AAC
- /(?=a(*MARK:A)b)..x/mark
- abxy
- 0: abx
- MK: A
- \= Expect no match
- abpq
- No match
- /(?=a(*MARK:A)b)..(*:Y)x/mark
- abxy
- 0: abx
- MK: Y
- \= Expect no match
- abpq
- No match
- /(?=a(*PRUNE:A)b)..x/mark
- abxy
- 0: abx
- MK: A
- \= Expect no match
- abpq
- No match
- /(?=a(*PRUNE:A)b)..(*:Y)x/mark
- abxy
- 0: abx
- MK: Y
- \= Expect no match
- abpq
- No match
- /(?=a(*THEN:A)b)..x/mark
- abxy
- 0: abx
- MK: A
- \= Expect no match
- abpq
- No match
- /(?=a(*THEN:A)b)..(*:Y)x/mark
- abxy
- 0: abx
- MK: Y
- \= Expect no match
- abpq
- No match
- /(another)?(\1?)test/
- hello world test
- 0: test
- 1: <unset>
- 2:
- /(another)?(\1+)test/
- \= Expect no match
- hello world test
- No match
- /(a(*COMMIT)b){0}a(?1)|aac/
- aac
- 0: aac
- /((?:a?)*)*c/
- aac
- 0: aac
- 1:
- /((?>a?)*)*c/
- aac
- 0: aac
- 1:
- /(?>.*?a)(?<=ba)/
- aba
- 0: ba
- /(?:.*?a)(?<=ba)/
- aba
- 0: aba
- /(?>.*?a)b/s
- aab
- 0: ab
- /(?>.*?a)b/
- aab
- 0: ab
- /(?>^a)b/s
- \= Expect no match
- aab
- No match
- /(?>.*?)(?<=(abcd)|(wxyz))/
- alphabetabcd
- 0:
- 1: abcd
- endingwxyz
- 0:
- 1: <unset>
- 2: wxyz
- /(?>.*)(?<=(abcd)|(wxyz))/
- alphabetabcd
- 0: alphabetabcd
- 1: abcd
- endingwxyz
- 0: endingwxyz
- 1: <unset>
- 2: wxyz
- /(?>.*)foo/
- \= Expect no match
- abcdfooxyz
- No match
-
- /(?>.*?)foo/
- abcdfooxyz
- 0: foo
- /(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
- ac
- 0: ac
-
- /(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
- ac
- 0: ac
- /(?<=(*SKIP)ac)a/
- \= Expect no match
- aa
- No match
- /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark
- AAAC
- 0: AC
- /a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/mark
- acacd
- 0: acd
- MK: n
- /A(*SKIP:m)x|A(*SKIP:n)x|AB/mark
- AB
- 0: AB
- /((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/mark
- acacd
- 0: ac
- MK: n
- # Tests that try to figure out how Perl works. My hypothesis is that the first
- # verb that is backtracked onto is the one that acts. This seems to be the case
- # almost all the time, but there is one exception that is perhaps a bug.
- # This matches "aaaac"; each PRUNE advances one character until the subject no
- # longer starts with 5 'a's.
- /aaaaa(*PRUNE)b|a+c/
- aaaaaac
- 0: aaaac
- # Putting SKIP in front of PRUNE makes no difference, as it is never
- # backtracked onto, whether or not it has a label.
- /aaaaa(*SKIP)(*PRUNE)b|a+c/
- aaaaaac
- 0: aaaac
- /aaaaa(*SKIP:N)(*PRUNE)b|a+c/
- aaaaaac
- 0: aaaac
- /aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
- aaaaaac
- 0: aaaac
- # Putting THEN in front makes no difference.
-
- /aaaaa(*THEN)(*PRUNE)b|a+c/
- aaaaaac
- 0: aaaac
-
- # However, putting COMMIT in front of the prune changes it to "no match". I
- # think this is inconsistent and possibly a bug. For the moment, running this
- # test is moved out of the Perl-compatible file.
- /aaaaa(*COMMIT)(*PRUNE)b|a+c/
-
- # OK, lets play the same game again using SKIP instead of PRUNE.
- # This matches "ac" because SKIP forces the next match to start on the
- # sixth "a".
- /aaaaa(*SKIP)b|a+c/
- aaaaaac
- 0: ac
-
- # Putting PRUNE in front makes no difference.
- /aaaaa(*PRUNE)(*SKIP)b|a+c/
- aaaaaac
- 0: ac
- # Putting THEN in front makes no difference.
- /aaaaa(*THEN)(*SKIP)b|a+c/
- aaaaaac
- 0: ac
- # In this case, neither does COMMIT. This still matches "ac".
- /aaaaa(*COMMIT)(*SKIP)b|a+c/
- aaaaaac
- 0: ac
-
- # This gives "no match", as expected.
- /aaaaa(*COMMIT)b|a+c/
- \= Expect no match
- aaaaaac
- No match
- # ---- Tests using THEN ----
- # This matches "aaaaaac", as expected.
- /aaaaa(*THEN)b|a+c/
- aaaaaac
- 0: aaaaaac
- # Putting SKIP in front makes no difference.
- /aaaaa(*SKIP)(*THEN)b|a+c/
- aaaaaac
- 0: aaaaaac
-
- # Putting PRUNE in front makes no difference.
- /aaaaa(*PRUNE)(*THEN)b|a+c/
- aaaaaac
- 0: aaaaaac
-
- # Putting COMMIT in front makes no difference.
- /aaaaa(*COMMIT)(*THEN)b|a+c/
- aaaaaac
- 0: aaaaaac
-
- # End of "priority" tests
- /aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
- aaaaaa
- 0: a
- /aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
- aaaaaa
- 0: a
- /aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
- aaaaaa
- 0: aaaa
- /aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
- aaaaaa
- 0: a
- /a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
- aaaac
- 0: aac
- /a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
- aaaac
- 0: ac
- /aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
- aaaac
- 0: aac
- /aaa(*MARK:A)a(*SKIP:A)b|a+c/
- aaaac
- 0: ac
- /a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/mark
- aaaaaac
- 0: ac
- /.?(a|b(*THEN)c)/
- ba
- 0: ba
- 1: a
- /(a(*COMMIT)b)c|abd/
- abc
- 0: abc
- 1: ab
- \= Expect no match
- abd
- No match
- /(?=a(*COMMIT)b)abc|abd/
- abc
- 0: abc
- abd
- 0: abd
- /(?>a(*COMMIT)b)c|abd/
- abc
- 0: abc
- abd
- 0: abd
- /a(?=b(*COMMIT)c)[^d]|abd/
- abc
- 0: ab
- \= Expect no match
- abd
- No match
- /a(?=bc).|abd/
- abd
- 0: abd
- abc
- 0: ab
-
- /a(?>b(*COMMIT)c)d|abd/
- \= Expect no match
- abceabd
- No match
- /a(?>bc)d|abd/
- abceabd
- 0: abd
- /(?>a(*COMMIT)b)c|abd/
- abd
- 0: abd
- /(?>a(*COMMIT)c)d|abd/
- \= Expect no match
- abd
- No match
- /((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
- ac
- 0: ac
- 1: <unset>
- 2: c
-
- # These tests were formerly in test 2, but changes in PCRE and Perl have
- # made them compatible.
-
- /^(a)?(?(1)a|b)+$/
- \= Expect no match
- a
- No match
- /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/x,mark
- \= Expect no match
- AAAC
- No match, mark = A
- /^((abc|abcx)(*THEN)y|abcd)/
- abcd
- 0: abcd
- 1: abcd
- \= Expect no match
- abcxy
- No match
-
- /^((yes|no)(*THEN)(*F))?/
- \= Expect no match
- yes
- No match
- /(A (.*) C? (*THEN) | A D) (*FAIL)/x
- \= Expect no match
- AbcdCBefgBhiBqz
- No match
- /(A (.*) C? (*THEN) | A D) z/x
- \= Expect no match
- AbcdCBefgBhiBqz
- No match
- /(A (.*) C? (*THEN) | A D) \s* (*FAIL)/x
- \= Expect no match
- AbcdCBefgBhiBqz
- No match
- /(A (.*) C? (*THEN) | A D) \s* z/x
- \= Expect no match
- AbcdCBefgBhiBqz
- No match
- /(A (.*) (?:C|) (*THEN) | A D) (*FAIL)/x
- \= Expect no match
- AbcdCBefgBhiBqz
- No match
- /(A (.*) (?:C|) (*THEN) | A D) z/x
- \= Expect no match
- AbcdCBefgBhiBqz
- No match
- /(A (.*) C{0,6} (*THEN) | A D) (*FAIL)/x
- \= Expect no match
- AbcdCBefgBhiBqz
- No match
- /(A (.*) C{0,6} (*THEN) | A D) z/x
- \= Expect no match
- AbcdCBefgBhiBqz
- No match
- /(A (.*) (CE){0,6} (*THEN) | A D) (*FAIL)/x
- \= Expect no match
- AbcdCEBefgBhiBqz
- No match
- /(A (.*) (CE){0,6} (*THEN) | A D) z/x
- \= Expect no match
- AbcdCEBefgBhiBqz
- No match
- /(A (.*) (CE*){0,6} (*THEN) | A D) (*FAIL)/x
- \= Expect no match
- AbcdCBefgBhiBqz
- No match
- /(A (.*) (CE*){0,6} (*THEN) | A D) z/x
- \= Expect no match
- AbcdCBefgBhiBqz
- No match
- /(?=a(*COMMIT)b|ac)ac|ac/
- \= Expect no match
- ac
- No match
- /(?=a(*COMMIT)b|(ac)) ac | (a)c/x
- \= Expect no match
- ac
- No match
- # ----
- /(?(?!b(*THEN)a)bn|bnn)/
- bnn
- 0: bn
- /(?!b(*SKIP)a)bn|bnn/
- bnn
- 0: bn
-
- /(?(?!b(*SKIP)a)bn|bnn)/
- bnn
- 0: bn
- /(?!b(*PRUNE)a)bn|bnn/
- bnn
- 0: bn
-
- /(?(?!b(*PRUNE)a)bn|bnn)/
- bnn
- 0: bn
-
- /(?!b(*COMMIT)a)bn|bnn/
- bnn
- 0: bn
-
- /(?(?!b(*COMMIT)a)bn|bnn)/
- bnn
- 0: bn
- /(?=b(*SKIP)a)bn|bnn/
- \= Expect no match
- bnn
- No match
- /(?=b(*THEN)a)bn|bnn/
- bnn
- 0: bnn
-
- /^(?!a(*SKIP)b)/
- ac
- 0:
- /^(?!a(*SKIP)b)../
- acd
- 0: ac
- /(?!a(*SKIP)b)../
- acd
- 0: ac
- /^(?(?!a(*SKIP)b))/
- ac
- 0:
- /^(?!a(*PRUNE)b)../
- acd
- 0: ac
- /(?!a(*PRUNE)b)../
- acd
- 0: ac
- /(?!a(*COMMIT)b)ac|cd/
- ac
- 0: ac
- /\A.*?(?:a|bc)/
- ba
- 0: ba
- /^(A(*THEN)B|C(*THEN)D)/
- CD
- 0: CD
- 1: CD
- /(*:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
- abc
- 0: b
- MK: m(m
- /(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
- abc
- 0: b
- MK: m(m
- /(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
- abc
- 0: b
- /(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
- abc
- 0: b
- MK: m(m
- /^\d*\w{4}/
- 1234
- 0: 1234
- \= Expect no match
- 123
- No match
- /^[^b]*\w{4}/
- aaaa
- 0: aaaa
- \= Expect no match
- aaa
- No match
- /^[^b]*\w{4}/i
- aaaa
- 0: aaaa
- \= Expect no match
- aaa
- No match
- /^a*\w{4}/
- aaaa
- 0: aaaa
- \= Expect no match
- aaa
- No match
- /^a*\w{4}/i
- aaaa
- 0: aaaa
- \= Expect no match
- aaa
- No match
- /(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
- foofoo
- 0: foofoo
- 1: foo
- barbar
- 0: barbar
- 1: <unset>
- 2: bar
- /(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
- AfooA
- 0: AfooA
- 1: A
- 2: foo
- AbarA
- 0: AbarA
- 1: A
- 2: <unset>
- 3: bar
- \= Expect no match
- Afoofoo
- No match
- Abarbar
- No match
- /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
- 1 IN SOA non-sp1 non-sp2(
- 0: 1 IN SOA non-sp1 non-sp2(
- 1: 1
- 2: non-sp1
- 3: non-sp2
- /^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/x,dupnames
- Ax
- 0: Ax
- 1: A
- BAxy
- 0: BAxy
- 1: <unset>
- 2: B
- 3: A
-
- /^A\xZ/
- A\0Z
- 0: A\x00Z
- /^A\o{123}B/
- A\123B
- 0: ASB
- / ^ a + + b $ /x
- aaaab
- 0: aaaab
-
- / ^ a + #comment
- + b $ /x
- aaaab
- 0: aaaab
-
- / ^ a + #comment
- #comment
- + b $ /x
- aaaab
- 0: aaaab
-
- / ^ (?> a + ) b $ /x
- aaaab
- 0: aaaab
- / ^ ( a + ) + + \w $ /x
- aaaab
- 0: aaaab
- 1: aaaa
- /(?:a\Kb)*+/aftertext
- ababc
- 0: b
- 0+ c
- /(?>a\Kb)*/aftertext
- ababc
- 0: b
- 0+ c
- /(?:a\Kb)*/aftertext
- ababc
- 0: b
- 0+ c
- /(a\Kb)*+/aftertext
- ababc
- 0: b
- 0+ c
- 1: ab
- /(a\Kb)*/aftertext
- ababc
- 0: b
- 0+ c
- 1: ab
- /(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
- \= Expect no match
- acb
- No match
- /\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++/
- NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
- 0: NON QUOTED "QUOT""ED" AFTER
- /\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++/
- NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
- 0: NON QUOTED "QUOT""ED" AFTER
- /\A(?:[^\"]++|\"(?:[^\"]++|\"\")++\")++/
- NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
- 0: NON QUOTED "QUOT""ED" AFTER
- /\A([^\"1]++|[\"2]([^\"3]*+|[\"4][\"5])*+[\"6])++/
- NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
- 0: NON QUOTED "QUOT""ED" AFTER
- 1: AFTER
- 2:
- /^\w+(?>\s*)(?<=\w)/
- test test
- 0: tes
- /(?P<same>a)(?P<same>b)/g,dupnames
- abbaba
- 0: ab
- 1: a
- 2: b
- 0: ab
- 1: a
- 2: b
- /(?P<same>a)(?P<same>b)(?P=same)/g,dupnames
- abbaba
- 0: aba
- 1: a
- 2: b
- /(?P=same)?(?P<same>a)(?P<same>b)/g,dupnames
- abbaba
- 0: ab
- 1: a
- 2: b
- 0: ab
- 1: a
- 2: b
- /(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/g,dupnames
- \= Expect no match
- bbbaaaccccaaabbbcc
- No match
- /(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
- acl
- 0: acl
- 1: a
- bdl
- 0: bdl
- 1: <unset>
- 2: b
- adl
- 0: dl
- bcl
- 0: l
- /\sabc/
- \x{0b}abc
- 0: \x0babc
- /[\Qa]\E]+/
- aa]]
- 0: aa]]
- /[\Q]a\E]+/
- aa]]
- 0: aa]]
- /A((((((((a))))))))\8B/
- AaaB
- 0: AaaB
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- /A(((((((((a)))))))))\9B/
- AaaB
- 0: AaaB
- 1: a
- 2: a
- 3: a
- 4: a
- 5: a
- 6: a
- 7: a
- 8: a
- 9: a
-
- /A[\8\9]B/
- A8B
- 0: A8B
- A9B
- 0: A9B
- /(|ab)*?d/
- abd
- 0: abd
- 1: ab
- xyd
- 0: d
- /(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/
- 1234abcd
- 0:
- 1: <unset>
- 2: <unset>
- 3: <unset>
- 4: <unset>
- 5:
- /(\2|a)(\1)/
- aaa
- 0: aa
- 1: a
- 2: a
- /(\2)(\1)/
- /Z*(|d*){216}/
- /(?1)(?#?'){8}(a)/
- baaaaaaaaac
- 0: aaaaaaaaa
- 1: a
- /((((((((((((x))))))))))))\12/
- xx
- 0: xx
- 1: x
- 2: x
- 3: x
- 4: x
- 5: x
- 6: x
- 7: x
- 8: x
- 9: x
- 10: x
- 11: x
- 12: x
- /A[\8]B[\9]C/
- A8B9C
- 0: A8B9C
- /(?1)()((((((\1++))\x85)+)|))/
- \x85\x85
- 0: \x85\x85
- 1:
- 2: \x85\x85
- 3: \x85\x85
- 4: \x85\x85
- 5: \x85
- 6:
- 7:
- /(?|(\k'Pm')|(?'Pm'))/
- abcd
- 0:
- 1:
- /(?|(aaa)|(b))\g{1}/
- aaaaaa
- 0: aaaaaa
- 1: aaa
- bb
- 0: bb
- 1: b
- /(?|(aaa)|(b))(?1)/
- aaaaaa
- 0: aaaaaa
- 1: aaa
- baaa
- 0: baaa
- 1: b
- \= Expect no match
- bb
- No match
- /(?|(aaa)|(b))/
- xaaa
- 0: aaa
- 1: aaa
- xbc
- 0: b
- 1: b
- /(?|(?'a'aaa)|(?'a'b))\k'a'/
- aaaaaa
- 0: aaaaaa
- 1: aaa
- bb
- 0: bb
- 1: b
- /(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/dupnames
- aaaccccaaa
- 0: aaaccccaaa
- 1: aaa
- 2: cccc
- bccccb
- 0: bccccb
- 1: b
- 2: cccc
- # /x does not apply to MARK labels
- /x (*MARK:ab cd # comment
- ef) x/x,mark
- axxz
- 0: xx
- MK: ab cd # comment\x0aef
- /(?<=a(B){0}c)X/
- acX
- 0: X
- /(?<DEFINE>b)(?(DEFINE)(a+))(?&DEFINE)/
- bbbb
- 0: bb
- 1: b
- \= Expect no match
- baaab
- No match
- /(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\s])/
- \ Fred:099
- 0:
- /(?=.*X)X$/
- \ X
- 0: X
- /(?s)(?=.*?)b/
- aabc
- 0: b
- /(Z)(a)\2{1,2}?(?-i)\1X/i
- ZaAAZX
- 0: ZaAAZX
- 1: Z
- 2: a
- /(?'c')XX(?'YYYYYYYYYYYYYYYYYYYYYYYCl')/
- /[s[:digit:]\E-H]+/
- s09-H
- 0: s09-H
- /[s[:digit:]\Q\E-H]+/
- s09-H
- 0: s09-H
- /a+(?:|b)a/
- aaaa
- 0: aaaa
- /X?(R||){3335}/
- /(?1)(A(*COMMIT)|B)D/
- ABD
- 0: ABD
- 1: B
- XABD
- 0: ABD
- 1: B
- BAD
- 0: BAD
- 1: A
- ABXABD
- 0: ABD
- 1: B
- \= Expect no match
- ABX
- No match
- /(?(DEFINE)(?<m> 1? (?=(?<cond>2)?) 1 2 (?('cond')|3)))
- \A
- ()
- (?&m)
- \Z/x
- 123
- 0: 123
- 1: <unset>
- 2: <unset>
- 3:
- /^(?:
- (?: A| (1? (?=(?<cond>2)?) (1) 2 (?('cond')|3)) )
- (Z)
- )+$/x
- AZ123Z
- 0: AZ123Z
- 1: 123
- 2: <unset>
- 3: 1
- 4: Z
- \= Expect no match
- AZ12Z
- No match
-
- /^ (?(DEFINE) ( (?!(a)\2b)..) ) ()(?1) /x
- acb
- 0: ac
- 1: <unset>
- 2: <unset>
- 3:
- \= Expect no match
- aab
- No match
-
- /(?>ab|abab){1,5}?M/
- abababababababababababM
- 0: abababababM
- /(?>ab|abab){2}?M/
- abababM
- 0: ababM
- /((?(?=(a))a)+k)/
- bbak
- 0: ak
- 1: ak
- 2: a
- /((?(?=(a))a|)+k)/
- bbak
- 0: ak
- 1: ak
- 2: a
- /(?(?!(b))a|b)+k/
- ababbalbbadabak
- 0: abak
- 1: b
- /(?!(b))c|b/
- Ab
- 0: b
- Ac
- 0: c
- /(?=(b))b|c/
- Ab
- 0: b
- 1: b
- Ac
- 0: c
- /^(.|(.)(?1)\2)$/
- a
- 0: a
- 1: a
- aba
- 0: aba
- 1: aba
- 2: a
- abcba
- 0: abcba
- 1: abcba
- 2: a
- ababa
- 0: ababa
- 1: ababa
- 2: a
- abcdcba
- 0: abcdcba
- 1: abcdcba
- 2: a
- /^((.)(?1)\2|.?)$/
- a
- 0: a
- 1: a
- aba
- 0: aba
- 1: aba
- 2: a
- abba
- 0: abba
- 1: abba
- 2: a
- abcba
- 0: abcba
- 1: abcba
- 2: a
- ababa
- 0: ababa
- 1: ababa
- 2: a
- abccba
- 0: abccba
- 1: abccba
- 2: a
- abcdcba
- 0: abcdcba
- 1: abcdcba
- 2: a
- abcddcba
- 0: abcddcba
- 1: abcddcba
- 2: a
- /^(.)(\1|a(?2))/
- bab
- 0: bab
- 1: b
- 2: ab
- /^(.|(.)(?1)?\2)$/
- abcba
- 0: abcba
- 1: abcba
- 2: a
-
- /^(?(?=(a))abc|def)/
- abc
- 0: abc
- 1: a
- /^(?(?!(a))def|abc)/
- abc
- 0: abc
- 1: a
- /^(?(?=(a)(*ACCEPT))abc|def)/
- abc
- 0: abc
- 1: a
- /^(?(?!(a)(*ACCEPT))def|abc)/
- abc
- 0: abc
- 1: a
- /^(?1)\d{3}(a)/
- a123a
- 0: a123a
- 1: a
- # This pattern uses a lot of named subpatterns in order to match email
- # addresses in various formats. It's a heavy test for named subpatterns. In the
- # <atext> group, slash is coded as \x{2f} so that this pattern can also be
- # processed by perltest.sh, which does not cater for an escaped delimiter
- # within the pattern. $ within the pattern must also be escaped. All $ and @
- # characters in subject strings are escaped so that Perl doesn't interpret them
- # as variable insertions and " characters must also be escaped for Perl.
- # This set of subpatterns is more or less a direct transliteration of the BNF
- # definitions in RFC2822, without any of the obsolete features. The addition of
- # a possessive + to the definition of <phrase> reduced the match limit in PCRE2
- # from over 5 million to just under 400, and eliminated a very noticeable delay
- # when this file was passed to perltest.sh.
- /(?ix)(?(DEFINE)
- (?<addr_spec> (?&local_part) \@ (?&domain) )
- (?<angle_addr> (?&CFWS)?+ < (?&addr_spec) > (?&CFWS)?+ )
- (?<atext> [a-z\d!#\$%&'*+-\x{2f}=?^_`{|}~] )
- (?<atom> (?&CFWS)?+ (?&atext)+ (?&CFWS)?+ )
- (?<ccontent> (?&ctext) | (?"ed_pair) | (?&comment) )
- (?<ctext> [^\x{9}\x{10}\x{13}\x{7f}-\x{ff}\ ()\\] )
- (?<comment> \( (?: (?&FWS)?+ (?&ccontent) )*+ (?&FWS)?+ \) )
- (?<CFWS> (?: (?&FWS)?+ (?&comment) )* (?# NOT possessive)
- (?: (?&FWS)?+ (?&comment) | (?&FWS) ) )
- (?<dcontent> (?&dtext) | (?"ed_pair) )
- (?<display_name> (?&phrase) )
- (?<domain> (?&dot_atom) | (?&domain_literal) )
- (?<domain_literal> (?&CFWS)?+ \[ (?: (?&FWS)?+ (?&dcontent) )* (?&FWS)?+ \]
- (?&CFWS)?+ )
- (?<dot_atom> (?&CFWS)?+ (?&dot_atom_text) (?&CFWS)?+ )
- (?<dot_atom_text> (?&atext)++ (?: \. (?&atext)++)*+ )
- (?<dtext> [^\x{9}\x{10}\x{13}\x{7f}-\x{ff}\ \[\]\\] )
- (?<FWS> (?: [\t\ ]*+ \n)?+ [\t\ ]++ )
- (?<local_part> (?&dot_atom) | (?"ed_string) )
- (?<mailbox> (?&name_addr) | (?&addr_spec) )
- (?<name_addr> (?&display_name)? (?&angle_addr) )
- (?<phrase> (?&word)++ )
- (?<qcontent> (?&qtext) | (?"ed_pair) )
- (?<quoted_pair> " (?&text) )
- (?<quoted_string> (?&CFWS)?+ " (?: (?&FWS)?+ (?&qcontent))* (?&FWS)?+ "
- (?&CFWS)?+ )
- (?<qtext> [^\x{9}\x{10}\x{13}\x{7f}-\x{ff}\ "\\] )
- (?<text> [^\r\n] )
- (?<word> (?&atom) | (?"ed_string) )
- ) # End DEFINE
- ^(?&mailbox)$/
- Alan Other <user\@dom.ain>
- 0: Alan Other <[email protected]>
- <user\@dom.ain>
- 0: <[email protected]>
- user\@dom.ain
- 0: [email protected]
- user\@[]
- 0: user@[]
- user\@[domain literal]
- 0: user@[domain literal]
- user\@[domain literal with \"[square brackets\"] inside]
- 0: user@[domain literal with "[square brackets"] inside]
- \"A. Other\" <user.1234\@dom.ain> (a comment)
- 0: "A. Other" <[email protected]> (a comment)
- A. Other <user.1234\@dom.ain> (a comment)
- 0: A. Other <[email protected]> (a comment)
- \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
- 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
- \= Expect no match
- A missing angle <user\@some.where
- No match
- The quick brown fox
- No match
-
- # --------------------------------------------------------------------------
- # This pattern uses named groups to match default PCRE2 patterns. It's another
- # heavy test for named subpatterns. Once again, code slash as \x{2f} and escape
- # $ even in classes so that this works with pcre2test.
- /(?sx)(?(DEFINE)
- (?<assertion> (?&simple_assertion) | (?&lookaround) )
- (?<atomic_group> \( \? > (?®ex) \) )
- (?<back_reference> \\ \d+ |
- \\g (?: [+-]?\d+ | \{ (?: [+-]?\d+ | (?&groupname) ) \} ) |
- \\k <(?&groupname)> |
- \\k '(?&groupname)' |
- \\k \{ (?&groupname) \} |
- \( \? P= (?&groupname) \) )
- (?<branch> (?:(?&assertion) |
- (?&callout) |
- (?&comment) |
- (?&option_setting) |
- (?&qualified_item) |
- (?"ed_string) |
- (?"ed_string_empty) |
- (?&special_escape) |
- (?&verb)
- )* )
- (?<callout> \(\?C (?: \d+ |
- (?: (?<D>["'`^%\#\$])
- (?: \k'D'\k'D' | (?!\k'D') . )* \k'D' |
- \{ (?: \}\} | [^}]*+ )* \} )
- )? \) )
- (?<capturing_group> \( (?: \? P? < (?&groupname) > | \? ' (?&groupname) ' )?
- (?®ex) \) )
- (?<character_class> \[ \^?+ (?: \] (?&class_item)* | (?&class_item)+ ) \] )
- (?<character_type> (?! \\N\{\w+\} ) \\ [dDsSwWhHvVRN] )
- (?<class_item> (?: \[ : (?:
- alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print|
- punct|space|upper|word|xdigit
- ) : \] |
- (?"ed_string) |
- (?"ed_string_empty) |
- (?&escaped_character) |
- (?&character_type) |
- [^]] ) )
- (?<comment> \(\?\# [^)]* \) | (?"ed_string_empty) | \\E )
- (?<condition> (?: \( [+-]? \d+ \) |
- \( < (?&groupname) > \) |
- \( ' (?&groupname) ' \) |
- \( R \d* \) |
- \( R & (?&groupname) \) |
- \( (?&groupname) \) |
- \( DEFINE \) |
- \( VERSION >?=\d+(?:\.\d\d?)? \) |
- (?&callout)?+ (?&comment)* (?&lookaround) ) )
- (?<conditional_group> \(\? (?&condition) (?&branch) (?: \| (?&branch) )? \) )
- (?<delimited_regex> (?<delimiter> [-\x{2f}!"'`=_:;,%&@~]) (?®ex)
- \k'delimiter' .* )
- (?<escaped_character> \\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\{ [0-7]+ \} |
- x \{ (*COMMIT) [[:xdigit:]]* \} | x [[:xdigit:]]{0,2} |
- [aefnrt] | c[[:print:]] |
- [^[:alnum:]] ) )
- (?<group> (?&capturing_group) | (?&non_capturing_group) |
- (?&resetting_group) | (?&atomic_group) |
- (?&conditional_group) )
- (?<groupname> [a-zA-Z_]\w* )
- (?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\$\\] )
- (?<lookaround> \(\? (?: = | ! | <= | <! ) (?®ex) \) )
- (?<non_capturing_group> \(\? [iJmnsUx-]* : (?®ex) \) )
- (?<option_setting> \(\? [iJmnsUx-]* \) )
- (?<qualified_item> (?:\. |
- (?&lookaround) |
- (?&back_reference) |
- (?&character_class) |
- (?&character_type) |
- (?&escaped_character) |
- (?&group) |
- (?&subroutine_call) |
- (?&literal_character) |
- (?"ed_string)
- ) (?&comment)? (?&qualifier)? )
- (?<qualifier> (?: [?*+] | (?&range_qualifier) ) [+?]? )
- (?<quoted_string> (?: \\Q (?: (?!\\E | \k'delimiter') . )++ (?: \\E | ) ) )
-
- (?<quoted_string_empty> \\Q\\E )
- (?<range_qualifier> \{ (?: \d+ (?: , \d* )? | , \d+ ) \} )
- (?<regex> (?&start_item)* (?&branch) (?: \| (?&branch) )* )
- (?<resetting_group> \( \? \| (?®ex) \) )
- (?<simple_assertion> \^ | \$ | \\A | \\b | \\B | \\G | \\z | \\Z )
- (?<special_escape> \\K )
- (?<start_item> \( \* (?:
- ANY |
- ANYCRLF |
- BSR_ANYCRLF |
- BSR_UNICODE |
- CR |
- CRLF |
- LF |
- LIMIT_MATCH=\d+ |
- LIMIT_DEPTH=\d+ |
- LIMIT_HEAP=\d+ |
- NOTEMPTY |
- NOTEMPTY_ATSTART |
- NO_AUTO_POSSESS |
- NO_DOTSTAR_ANCHOR |
- NO_JIT |
- NO_START_OPT |
- NUL |
- UTF |
- UCP ) \) )
- (?<subroutine_call> (?: \(\?R\) | \(\?[+-]?\d+\) |
- \(\? (?: & | P> ) (?&groupname) \) |
- \\g < (?&groupname) > |
- \\g ' (?&groupname) ' |
- \\g < [+-]? \d+ > |
- \\g ' [+-]? \d+ ) )
- (?<verb> \(\* (?: ACCEPT | FAIL | F | COMMIT |
- (?:MARK)?:(?&verbname) |
- (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \) )
- (?<verbname> [^)]+ )
- ) # End DEFINE
- # Kick it all off...
- ^(?&delimited_regex)$/subject_literal,jitstack=256
- /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
- 0: /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
- /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
- 0: /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
- /^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
- 0: /^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
- /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
- 0: /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
- /<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- 0: /<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
- /^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /
- 0: /^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /
- /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
- 0: /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
- /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
- 0: /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
- /^(\w++|\s++)*$/
- 0: /^(\w++|\s++)*$/
- /a+b?(*THEN)c+(*FAIL)/
- 0: /a+b?(*THEN)c+(*FAIL)/
- /(A (A|B(*ACCEPT)|C) D)(E)/x
- 0: /(A (A|B(*ACCEPT)|C) D)(E)/x
- /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
- 0: /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
- /A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/B
- 0: /A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/B
- /(?C`a``b`)(?C'a''b')(?C"a""b")(?C^a^^b^)(?C%a%%b%)(?C#a##b#)(?C$a$$b$)(?C{a}}b})/B,callout_info
- 0: /(?C`a``b`)(?C'a''b')(?C"a""b")(?C^a^^b^)(?C%a%%b%)(?C#a##b#)(?C$a$$b$)(?C{a}}b})/B,callout_info
- /(?sx)(?(DEFINE)(?<assertion> (?&simple_assertion) | (?&lookaround) )(?<atomic_group> \( \? > (?®ex) \) )(?<back_reference> \\ \d+ | \\g (?: [+-]?\d+ | \{ (?: [+-]?\d+ | (?&groupname) ) \} ) | \\k <(?&groupname)> | \\k '(?&groupname)' | \\k \{ (?&groupname) \} | \( \? P= (?&groupname) \) )(?<branch> (?:(?&assertion) | (?&callout) | (?&comment) | (?&option_setting) | (?&qualified_item) | (?"ed_string) | (?"ed_string_empty) | (?&special_escape) | (?&verb) )* )(?<callout> \(\?C (?: \d+ | (?: (?<D>["'`^%\#\$]) (?: \k'D'\k'D' | (?!\k'D') . )* \k'D' | \{ (?: \}\} | [^}]*+ )* \} ) )? \) )(?<capturing_group> \( (?: \? P? < (?&groupname) > | \? ' (?&groupname) ' )? (?®ex) \) )(?<character_class> \[ \^?+ (?: \] (?&class_item)* | (?&class_item)+ ) \] )(?<character_type> (?! \\N\{\w+\} ) \\ [dDsSwWhHvVRN] )(?<class_item> (?: \[ : (?: alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print| punct|space|upper|word|xdigit ) : \] | (?"ed_string) | (?"ed_string_empty) | (?&escaped_character) | (?&character_type) | [^]] ) )(?<comment> \(\?\# [^)]* \) | (?"ed_string_empty) | \\E )(?<condition> (?: \( [+-]? \d+ \) | \( < (?&groupname) > \) | \( ' (?&groupname) ' \) | \( R \d* \) | \( R & (?&groupname) \) | \( (?&groupname) \) | \( DEFINE \) | \( VERSION >?=\d+(?:\.\d\d?)? \) | (?&callout)?+ (?&comment)* (?&lookaround) ) )(?<conditional_group> \(\? (?&condition) (?&branch) (?: \| (?&branch) )? \) )(?<delimited_regex> (?<delimiter> [-\x{2f}!"'`=_:;,%&@~]) (?®ex) \k'delimiter' .* )(?<escaped_character> \\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\{ [0-7]+ \} | x \{ (*COMMIT) [[:xdigit:]]* \} | x [[:xdigit:]]{0,2} | [aefnrt] | c[[:print:]] | [^[:alnum:]] ) )(?<group> (?&capturing_group) | (?&non_capturing_group) | (?&resetting_group) | (?&atomic_group) | (?&conditional_group) )(?<groupname> [a-zA-Z_]\w* )(?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\$\\] )(?<lookaround> \(\? (?: = | ! | <= | <! ) (?®ex) \) )(?<non_capturing_group> \(\? [iJmnsUx-]* : (?®ex) \) )(?<option_setting> \(\? [iJmnsUx-]* \) )(?<qualified_item> (?:\. | (?&lookaround) | (?&back_reference) | (?&character_class) | (?&character_type) | (?&escaped_character) | (?&group) | (?&subroutine_call) | (?&literal_character) | (?"ed_string) ) (?&comment)? (?&qualifier)? )(?<qualifier> (?: [?*+] | (?&range_qualifier) ) [+?]? )(?<quoted_string> (?: \\Q (?: (?!\\E | \k'delimiter') . )++ (?: \\E | ) ) ) (?<quoted_string_empty> \\Q\\E ) (?<range_qualifier> \{ (?: \d+ (?: , \d* )? | , \d+ ) \} )(?<regex> (?&start_item)* (?&branch) (?: \| (?&branch) )* )(?<resetting_group> \( \? \| (?®ex) \) )(?<simple_assertion> \^ | \$ | \\A | \\b | \\B | \\G | \\z | \\Z )(?<special_escape> \\K )(?<start_item> \( \* (?: ANY | ANYCRLF | BSR_ANYCRLF | BSR_UNICODE | CR | CRLF | LF | LIMIT_MATCH=\d+ | LIMIT_DEPTH=\d+ | LIMIT_HEAP=\d+ | NOTEMPTY | NOTEMPTY_ATSTART | NO_AUTO_POSSESS | NO_DOTSTAR_ANCHOR | NO_JIT | NO_START_OPT | NUL | UTF | UCP ) \) )(?<subroutine_call> (?: \(\?R\) | \(\?[+-]?\d+\) | \(\? (?: & | P> ) (?&groupname) \) | \\g < (?&groupname) > | \\g ' (?&groupname) ' | \\g < [+-]? \d+ > | \\g ' [+-]? \d+ ) )(?<verb> \(\* (?: ACCEPT | FAIL | F | COMMIT | (?:MARK)?:(?&verbname) | (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \) )(?<verbname> [^)]+ ))^(?&delimited_regex)$/
- 0: /(?sx)(?(DEFINE)(?<assertion> (?&simple_assertion) | (?&lookaround) )(?<atomic_group> \( \? > (?®ex) \) )(?<back_reference> \\ \d+ | \\g (?: [+-]?\d+ | \{ (?: [+-]?\d+ | (?&groupname) ) \} ) | \\k <(?&groupname)> | \\k '(?&groupname)' | \\k \{ (?&groupname) \} | \( \? P= (?&groupname) \) )(?<branch> (?:(?&assertion) | (?&callout) | (?&comment) | (?&option_setting) | (?&qualified_item) | (?"ed_string) | (?"ed_string_empty) | (?&special_escape) | (?&verb) )* )(?<callout> \(\?C (?: \d+ | (?: (?<D>["'`^%\#\$]) (?: \k'D'\k'D' | (?!\k'D') . )* \k'D' | \{ (?: \}\} | [^}]*+ )* \} ) )? \) )(?<capturing_group> \( (?: \? P? < (?&groupname) > | \? ' (?&groupname) ' )? (?®ex) \) )(?<character_class> \[ \^?+ (?: \] (?&class_item)* | (?&class_item)+ ) \] )(?<character_type> (?! \\N\{\w+\} ) \\ [dDsSwWhHvVRN] )(?<class_item> (?: \[ : (?: alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print| punct|space|upper|word|xdigit ) : \] | (?"ed_string) | (?"ed_string_empty) | (?&escaped_character) | (?&character_type) | [^]] ) )(?<comment> \(\?\# [^)]* \) | (?"ed_string_empty) | \\E )(?<condition> (?: \( [+-]? \d+ \) | \( < (?&groupname) > \) | \( ' (?&groupname) ' \) | \( R \d* \) | \( R & (?&groupname) \) | \( (?&groupname) \) | \( DEFINE \) | \( VERSION >?=\d+(?:\.\d\d?)? \) | (?&callout)?+ (?&comment)* (?&lookaround) ) )(?<conditional_group> \(\? (?&condition) (?&branch) (?: \| (?&branch) )? \) )(?<delimited_regex> (?<delimiter> [-\x{2f}!"'`=_:;,%&@~]) (?®ex) \k'delimiter' .* )(?<escaped_character> \\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\{ [0-7]+ \} | x \{ (*COMMIT) [[:xdigit:]]* \} | x [[:xdigit:]]{0,2} | [aefnrt] | c[[:print:]] | [^[:alnum:]] ) )(?<group> (?&capturing_group) | (?&non_capturing_group) | (?&resetting_group) | (?&atomic_group) | (?&conditional_group) )(?<groupname> [a-zA-Z_]\w* )(?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\$\\] )(?<lookaround> \(\? (?: = | ! | <= | <! ) (?®ex) \) )(?<non_capturing_group> \(\? [iJmnsUx-]* : (?®ex) \) )(?<option_setting> \(\? [iJmnsUx-]* \) )(?<qualified_item> (?:\. | (?&lookaround) | (?&back_reference) | (?&character_class) | (?&character_type) | (?&escaped_character) | (?&group) | (?&subroutine_call) | (?&literal_character) | (?"ed_string) ) (?&comment)? (?&qualifier)? )(?<qualifier> (?: [?*+] | (?&range_qualifier) ) [+?]? )(?<quoted_string> (?: \\Q (?: (?!\\E | \k'delimiter') . )++ (?: \\E | ) ) ) (?<quoted_string_empty> \\Q\\E ) (?<range_qualifier> \{ (?: \d+ (?: , \d* )? | , \d+ ) \} )(?<regex> (?&start_item)* (?&branch) (?: \| (?&branch) )* )(?<resetting_group> \( \? \| (?®ex) \) )(?<simple_assertion> \^ | \$ | \\A | \\b | \\B | \\G | \\z | \\Z )(?<special_escape> \\K )(?<start_item> \( \* (?: ANY | ANYCRLF | BSR_ANYCRLF | BSR_UNICODE | CR | CRLF | LF | LIMIT_MATCH=\d+ | LIMIT_DEPTH=\d+ | LIMIT_HEAP=\d+ | NOTEMPTY | NOTEMPTY_ATSTART | NO_AUTO_POSSESS | NO_DOTSTAR_ANCHOR | NO_JIT | NO_START_OPT | NUL | UTF | UCP ) \) )(?<subroutine_call> (?: \(\?R\) | \(\?[+-]?\d+\) | \(\? (?: & | P> ) (?&groupname) \) | \\g < (?&groupname) > | \\g ' (?&groupname) ' | \\g < [+-]? \d+ > | \\g ' [+-]? \d+ ) )(?<verb> \(\* (?: ACCEPT | FAIL | F | COMMIT | (?:MARK)?:(?&verbname) | (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \) )(?<verbname> [^)]+ ))^(?&delimited_regex)$/
- \= Expect no match
- /((?(?C'')\QX\E(?!((?(?C'')(?!X=X));=)r*X=X));=)/
- No match
- /(?:(?(2y)a|b)(X))+/
- No match
- /a(*MARK)b/
- No match
- /a(*CR)b/
- No match
- /(?P<abn>(?P=abn)(?<badstufxxx)/
- No match
- # --------------------------------------------------------------------------
- /<(?x:[a b])>/xx
- < >
- 0: < >
- /<(?:[a b])>/xx
- < >
- No match
- /<(?xxx:[a b])>/
- < >
- No match
-
- /<(?-x:[a b])>/xx
- < >
- 0: < >
- /[[:digit:]-]+/
- 12-24
- 0: 12-24
- /((?<=((*ACCEPT)) )\1?\b) /
- \= Expect no match
- ((?<=((*ACCEPT)) )\\1?\\b)\x20
- No match
- /((?<=((*ACCEPT))X)\1?Y)\1/
- XYYZ
- 0: YY
- 1: Y
- 2:
- /((?<=((*ACCEPT))X)\1?Y(*ACCEPT))\1/
- XYYZ
- 0: Y
- 1: Y
- 2:
- /(?(DEFINE)(?<optional_a>a?)X)^(?&optional_a)a$/
- aa
- 0: aa
- a
- 0: a
- /^(a?)b(?1)a/
- abaa
- 0: abaa
- 1: a
- aba
- 0: aba
- 1: a
- baa
- 0: baa
- 1:
- ba
- 0: ba
- 1:
- /^(a?)+b(?1)a/
- abaa
- 0: abaa
- 1:
- aba
- 0: aba
- 1:
- baa
- 0: baa
- 1:
- ba
- 0: ba
- 1:
- /^(a?)++b(?1)a/
- abaa
- 0: abaa
- 1:
- aba
- 0: aba
- 1:
- baa
- 0: baa
- 1:
- ba
- 0: ba
- 1:
- /^(a?)+b/
- b
- 0: b
- 1:
- ab
- 0: ab
- 1:
- aaab
- 0: aaab
- 1:
- /(?=a+)a(a+)++b/
- aab
- 0: aab
- 1: a
- /(?<=\G.)/g,aftertext
- abc
- 0:
- 0+ bc
- 0:
- 0+ c
- 0:
- 0+
- /(?<=(?=.)?)/
- /(?<=(?=.)?+)/
- /(?<=(?=.)*)/
- /(?<=(?=.){4,5})/
- /(?<=(?=.){4,5}x)/
- /a(?=.(*:X))(*SKIP:X)(*F)|(.)/
- abc
- 0: a
- 1: a
- /a(?>(*:X))(*SKIP:X)(*F)|(.)/
- abc
- 0: a
- 1: a
- /a(?:(*:X))(*SKIP:X)(*F)|(.)/
- abc
- 0: b
- 1: b
- #pattern no_start_optimize
- /(?>a(*:1))(?>b(*:1))(*SKIP:1)x|.*/
- abc
- 0: abc
- /(?>a(*:1))(?>b)(*SKIP:1)x|.*/
- abc
- 0: abc
- #subject mark
- /a(*ACCEPT:X)b/
- abc
- 0: a
- MK: X
-
- /(?=a(*ACCEPT:QQ)bc)axyz/
- axyz
- 0: axyz
- MK: QQ
- /(?(DEFINE)(a(*ACCEPT:X)))(?1)b/
- abc
- 0: ab
- MK: X
-
- /a(*F:X)b/
- abc
- No match, mark = X
-
- /(?(DEFINE)(a(*F:X)))(?1)b/
- abc
- No match, mark = X
- /a(*COMMIT:X)b/
- abc
- 0: ab
- MK: X
-
- /(?(DEFINE)(a(*COMMIT:X)))(?1)b/
- abc
- 0: ab
- MK: X
-
- /a+(*:Z)b(*COMMIT:X)(*SKIP:Z)c|.*/
- aaaabd
- 0: bd
- /a+(*:Z)b(*COMMIT:X)(*SKIP:X)c|.*/
- aaaabd
- No match, mark = X
- /a(*COMMIT:X)b/
- axabc
- No match, mark = X
- #pattern -no_start_optimize
- #subject -mark
- /(.COMMIT)(*COMMIT::::::::::interal error:::)/
- /(*COMMIT:ÿÿ)/
- /(*COMMIT:]w)/
- /(?i)A(?^)B(?^x:C D)(?^i)e f/
- aBCDE F
- 0: aBCDE F
- \= Expect no match
- aBCDEF
- No match
- AbCDe f
- No match
- /(*pla:foo).{6}/
- abcfoobarxyz
- 0: foobar
- \= Expect no match
- abcfooba
- No match
- /(*positive_lookahead:foo).{6}/
- abcfoobarxyz
- 0: foobar
-
- /(?(*pla:foo).{6}|a..)/
- foobarbaz
- 0: foobar
- abcfoobar
- 0: abc
- /(?(*positive_lookahead:foo).{6}|a..)/
- foobarbaz
- 0: foobar
- abcfoobar
- 0: abc
-
- /(*plb:foo)bar/
- abcfoobar
- 0: bar
- \= Expect no match
- abcbarfoo
- No match
- /(*positive_lookbehind:foo)bar/
- abcfoobar
- 0: bar
- \= Expect no match
- abcbarfoo
- No match
-
- /(?(*plb:foo)bar|baz)/
- abcfoobar
- 0: bar
- bazfoobar
- 0: baz
- abcbazfoobar
- 0: baz
- foobazfoobar
- 0: bar
-
- /(?(*positive_lookbehind:foo)bar|baz)/
- abcfoobar
- 0: bar
- bazfoobar
- 0: baz
- abcbazfoobar
- 0: baz
- foobazfoobar
- 0: bar
-
- /(*nlb:foo)bar/
- abcbarfoo
- 0: bar
- \= Expect no match
- abcfoobar
- No match
- /(*negative_lookbehind:foo)bar/
- abcbarfoo
- 0: bar
- \= Expect no match
- abcfoobar
- No match
-
- /(?(*nlb:foo)bar|baz)/
- abcfoobaz
- 0: baz
- abcbarbaz
- 0: bar
- \= Expect no match
- abcfoobar
- No match
-
- /(?(*negative_lookbehind:foo)bar|baz)/
- abcfoobaz
- 0: baz
- abcbarbaz
- 0: bar
- \= Expect no match
- abcfoobar
- No match
-
- /(*atomic:a+)\w/
- aaab
- 0: aaab
- \= Expect no match
- aaaa
- No match
- / (?<word> \w+ )* \. /xi
- pokus.
- 0: pokus.
- 1: pokus
-
- /(?(DEFINE) (?<word> \w+ ) ) (?&word)* \./xi
- pokus.
- 0: pokus.
- /(?(DEFINE) (?<word> \w+ ) ) ( (?&word)* ) \./xi
- pokus.
- 0: pokus.
- 1: <unset>
- 2: pokus
- /(?&word)* (?(DEFINE) (?<word> \w+ ) ) \./xi
- pokus.
- 0: pokus.
- /(?&word)* \. (?<word> \w+ )/xi
- pokus.hokus
- 0: pokus.hokus
- 1: hokus
- /a(?(?=(*:2)b).)/mark
- abc
- 0: ab
- MK: 2
- acb
- 0: a
- /a(?(?!(*:2)b).)/mark
- acb
- 0: ac
- abc
- 0: a
- MK: 2
- /(?:a|ab){1}+c/
- \= Expect no match
- abc
- No match
- /(a|ab){1}+c/
- abc
- No match
-
- /(a+){1}+a/
- \= Expect no match
- aaaa
- No match
- /(?(DEFINE)(a|ab))(?1){1}+c/
- abc
- No match
- /(?:a|(?=b)|.)*\z/
- abc
- 0: abc
-
- /(?:a|(?=b)|.)*/
- abc
- 0: a
-
- /(?<=a(*SKIP)x)|c/
- abcd
- No match
-
- /(?<=a(*SKIP)x)|d/
- abcd
- 0: d
-
- /(?<=(?=.(?<=x)))/aftertext
- abx
- 0:
- 0+ x
- /(?<=(?=(?<=a)))b/
- ab
- 0: b
- /^(?<A>a)(?(<A>)b)((?<=b).*)$/
- abc
- 0: abc
- 1: a
- 2: c
- /^(a\1?){4}$/
- aaaa
- 0: aaaa
- 1: a
- aaaaaa
- 0: aaaaaa
- 1: aa
- /^((\1+)|\d)+133X$/
- 111133X
- 0: 111133X
- 1: 11
- 2: 11
- /^(?>.*?([A-Z])(?!.*\1)){26}/i
- The quick brown fox jumps over the lazy dog.
- 0: The quick brown fox jumps over the lazy dog
- 1: g
- Jackdaws love my big sphinx of quartz.
- 0: Jackdaws love my big sphinx of quartz
- 1: z
- Pack my box with five dozen liquor jugs.
- 0: Pack my box with five dozen liquor jugs
- 1: s
- \= Expect no match
- The quick brown fox jumps over the lazy cat.
- No match
- Hackdaws love my big sphinx of quartz.
- No match
- Pack my fox with five dozen liquor jugs.
- No match
- /(?<=X(?(DEFINE)(A)))X(*F)/
- \= Expect no match
- AXYZ
- No match
- /(?<=X(?(DEFINE)(A)))./
- AXYZ
- 0: Y
- /(?<=X(?(DEFINE)(.*))Y)./
- AXYZ
- 0: Z
- /(?<=X(?(DEFINE)(Y))(?1))./
- AXYZ
- 0: Z
- /(?(DEFINE)(?<foo>bar))(?<![-a-z0-9])word/
- word
- 0: word
- /a{1,2,3}b/
- a{1,2,3}b
- 0: a{1,2,3}b
- /\214748364/
- >\x{8c}748364<
- 0: \x8c748364
-
- /a{65536/
- >a{65536<
- 0: a{65536
- /a\K.(?0)*/
- abac
- 0: c
- /(a\K.(?1)*)/
- abac
- 0: c
- 1: abac
- # --------------------------------------------------------------------------
- # Perl-compatible tests of variable-length lookbehinds.
- /(?<=ab?c).../g
- abcdefgacxyz
- 0: def
- 0: xyz
- /(?<=PQR|ab?c).../g
- abcdefgacxyzPQR123
- 0: def
- 0: xyz
- 0: 123
- /(?<=ab?c|PQR).../g
- abcdefgacxyzPQR123
- 0: def
- 0: xyz
- 0: 123
- /(?<=PQ|ab?c).../g
- abcdefgacxyzPQR123
- 0: def
- 0: xyz
- 0: R12
- /(?<=ab?c|PQ).../g
- abcdefgacxyzPQR123
- 0: def
- 0: xyz
- 0: R12
- /(?<=a(b?c|d?e?e)f)X./g
- acfX1zzzaefX2zzzadeefX3zzzX4zzz
- 0: X1
- 1: c
- 0: X2
- 1: e
- 0: X3
- 1: dee
- /(?<!a(b?c|d?e?e)f)X./g
- acfX1zzzaefX2zzzadeefX3zzzX4zzz
- 0: X4
-
- /(?(?<=ab?c)d|e)/
- abcdefg
- 0: d
- acdefg
- 0: d
- axdefg
- 0: e
-
- /(?<=\d{2,3}|ABC)./
- ABCD
- 0: D
- /(?<=(\d{1,255}))X/
- 1234X
- 0: X
- 1: 1234
- /(?<=a(b?c){3}d)X/
- ZXacbccdXYZ
- 0: X
- 1: c
-
- /(?<=a(b?c){0}d)X/
- ZXadXYZ
- 0: X
-
- /(?<=a?(b?c){0}d)X./
- ZXadXYZ
- 0: XY
-
- /(?<=\R)X/
- \x{0a}X
- 0: X
- a\x{0a}X
- 0: X
- a\x{0d}\x{0a}X
- 0: X
- # --------------------------------------------------------------------------
- # Altered interpretation of {,n}
- /a{,3}B/
- XBBB
- 0: B
- XaBBB
- 0: aB
- XaaBBB
- 0: aaB
- XaaaBBB
- 0: aaaB
- XaaaaBBB
- 0: aaaB
- # But {,} remains not a qualifier
- /a{,}B/
- Xa{,}BBB
- 0: a{,}B
- \= Expect no match
- XBBB
- No match
- XaBBB
- No match
-
- # Checks for non-quantifiers after refactored code
- /X{/
- ZZX{}YY
- 0: X{
- /X{A/
- ZZX{ABC}
- 0: X{A
- /X{}/
- ZZX{}YZ
- 0: X{}
-
- /X{1234/
- ZZX{123456
- 0: X{1234
-
- /X{12ABC}/
- ZZX{12ABC}Y
- 0: X{12ABC}
-
- /X{1,/
- ZZX{1,...
- 0: X{1,
-
- /X{,9/
- ZZX{,9}abc
- 0: X{,9
-
- /X{,9]/
- ZZX{,9]..
- 0: X{,9]
-
- # --------------------------------------------------------------------------
- /(A)(?-1)(?+1)(B)/
- xxAABBzz
- 0: AABB
- 1: A
- 2: B
-
- /(A)(\g{ -2 }B)/
- XAABX
- 0: AAB
- 1: A
- 2: AB
- /(A)((?-2)B)/
- XAABX
- 0: AAB
- 1: A
- 2: AB
- /a\c\X/
- --a\x1cX--
- 0: a\x1cX
-
- /(a)\g{ 1 }/
- baab
- 0: aa
- 1: a
- /a{ 1,2 }/
- Xaaaaa
- 0: aa
- /a{ 1 , 2 }/
- Xaaaaa
- 0: aa
- /(?'name'ab)\k{ name }(?P=name)/
- XabababX
- 0: ababab
- 1: ab
- /A{,}B/
- A{,}B
- 0: A{,}B
- /A{ , }B/
- A{ , }B
- 0: A{ , }B
-
- /A{ ,3}/
- AAAAAACC
- 0: AAA
- /A{ 3, }/
- BBAAAAAACC
- 0: AAAAAA
- # This pattern validates regular expression patterns. The original that I was
- # sent was this:
- # /^((?:(?:[^?+*{}()[\]\\|]+|\\.|\[(?:\^?\\.|\^[^\\]|[^\\^])(?:[^\]\\]+|\\.)*\]|\((?:\?[:=!]|\?<[=!]|\?>)?(?1)??\)|\(\?(?:R|[+-]?\d+)\))(?:(?:[?+*]|\{\d+(?:,\d*)?\})[?+]?)?|\|)*)$/
- # This is not very readable, and also does not handle all features. I have done
- # some work on it.
- /^
- (?<re>
- # A regular expression is zero or more of these items.
- (?:
- # An item is one of these:
- (?:
- [^?+*{}()\[\]\\|]++| # Non-meta characters or unquoted .
- \\.| # Quoted .
- \[ # Class, which is [
- (?: # Followed by
- \^?\\.| # Optional ^ and any escaped character
- \^[^\\]| # OR ^ and not escaped character
- [^\\^] # OR neither ^ nor \
- ) # Followed by
- (?:[^\]\\]+|\\.)*+ # Zero or more (not ] or \) OR escaped dot
- \]| # Class ends with ]
- \( # Parenthesized group
- (?: # Start with optional
- \?[:=!]| # ? followed by : = !
- \?<[=!]| # OR ?< followed by = or !
- \?> # OR ?>
- )?
- (?&re)?? # Then a nested <re>
- \)| # End parenthesized group
- \(\? # Other parenthesized items
- (?: # (? followed by
- R| # R
- [+-]?\d++ # Or optional +- and digits
- )
- \)| # End parens
- \(\* # Verbs
- (?:
- COMMIT|
- FAIL|
- MARK:[^)]*|
- (?:PRUNE|SKIP|THEN)(?::[^\)]*+)?
- )
- \)
- ) # End list of items
- # Followed by an optional quantifier
- (?:
- (?:
- [?+*] # ?+*
- | # OR
- \{\d+ # { digits
- (?:,\d*)? # optionally followed by ,digits
- \} # then closing }
- | # OR
- \{,\d+} # {,digits}
- )
- [?+]? # optional ungreedy or possessive
- )?
- | # OR an "item" is a branch ending
- \|
- )* # Zero or more top-level items.
- ) # End regex group.
- $/x
- [abcdef]
- 0: [abcdef]
- 1: [abcdef]
- [abc\\]def]
- 0: [abc\]def]
- 1: [abc\]def]
- a.b|abcd
- 0: a.b|abcd
- 1: a.b|abcd
- ab()d
- 0: ab()d
- 1: ab()d
- ab{1,3}d
- 0: ab{1,3}d
- 1: ab{1,3}d
- ab{,3}d
- 0: ab{,3}d
- 1: ab{,3}d
- ab(*FAIL)d(*COMMIT)(*SKIP)(*THEN:abc)
- 0: ab(*FAIL)d(*COMMIT)(*SKIP)(*THEN:abc)
- 1: ab(*FAIL)d(*COMMIT)(*SKIP)(*THEN:abc)
- ab(*MARK:xyz)
- 0: ab(*MARK:xyz)
- 1: ab(*MARK:xyz)
- (?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\\s])
- 0: (?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\s])
- 1: (?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\s])
- abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\^\\\\\\?caxyz
- 0: abcd\t\n\r\f\a\e\071\x3b\^\\\?caxyz
- 1: abcd\t\n\r\f\a\e\071\x3b\^\\\?caxyz
- a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz
- 0: a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz
- 1: a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz
- \\G(?:(?=(\\1.|)(.))){1,13}?(?!.*\\2.*\\2)\\1\\K\\2
- 0: \G(?:(?=(\1.|)(.))){1,13}?(?!.*\2.*\2)\1\K\2
- 1: \G(?:(?=(\1.|)(.))){1,13}?(?!.*\2.*\2)\1\K\2
- \= Expect no match
- ab)d
- No match
- ab(d
- No match
- {4,5}
- No match
- a[]b
- No match
- (a)(?(1)a|b|c)
- No match
- /^..A(*SKIP)B|C/
- 12ADC
- 0: C
- /(?<!a?)/
- a
- No match
- # End of testinput1
|