<?php
require_once __DIR__ . '/R.php';
// Full string match
//
// /^Paradise Lost$/
//
echo R::expression()
->startOfString()
->text('Paradise Lost')
->endOfString() . "\n";
// Alternate texts
//
// /The (dog|cat)?basket fell off the roof/
//
echo R::expression()
->text('The ')
->group(
R::group()->optional()->oneOfThese()->text('dog')->text('cat')
)
->text('basket fell off the roof') . "\n";
// Characters
//
// /the [bc]?old man and the [^c]ee.*/
//
echo R::expression()
->text('the ')
->inChars(R::chars('bc')->optional())
->text('old man and the ')
->notInChars(R::chars('c'))
->text('ee')
->char(R::anyChar()->zeroOrMore()) . "\n";
// Nested groups
//
// /(<a href='([^']*)'>)/
echo R::expression()
->group(
R::group()
->text("<a href='")
->group(
R::group()
->notInChars(R::chars("'")->zeroOrMore())
)
->text("'>")
) . "\n";
// Assertions
//
// /\bkettle\b/
//
echo R::expression()
->wordBoundary()
->text('kettle')
->wordBoundary() . "\n";
// Quantifiers: Dutch postal code
//
// /[\d]{4}[a-z]{2}/
//
echo R::expression()
->char(R::chars()->digit()->times(4))
->char(R::chars()->letter()->times(2)) . "\n";
// Named blocks
// Automatically adjusting delimiters (#)
//
// #(?P<protocol>http[s]?)://(?P<url>.*)#
//
echo R::expression()
->group(
R::group('protocol')
->text('http')
->char(R::chars('s')->optional())
)
->text('://')
->group(
R::group('url')
->char(R::anyChar()->zeroOrMore())
) . "\n";
// Multiline expressions
//
// /^start\s+(^the)\s+show$/m
//
echo R::multiLineExpression()
->startOfStringOrLine()
->text('start')
->whitespace()
->group(
R::group()->startOfLine()->text('the')
)
->whitespace()
->text('show')
->endOfStringOrLine() . "\n";
// Look ahead, look behind
//
// /(?<=Lord )(Byron)/
//
echo R::expression()
->lookBehind(
R::lookBehind()->text('Lord ')
)
->group(
R::group()->text('Byron')
) . "\n";
// Include raw expressions
//
// #(?P<protocol>https?)://(?P<url>.*)#
//
echo R::expression()
->group(
R::group('protocol')->raw('https?')
)
->text('://')
->group(
R::group('url')->raw('.*')
) . "\n";
|