Xpressions
A fluent php api for regular expressions.
Install / Use
/learn @AlShahawi/XpressionsREADME
Xpressions
A fluent PHP API for regular expressions.
Installation
Xpressions now is not ready for production yet, but you can install it using composer via:
composer require alshahawi/xpressions:dev-master
Examples
Creating an instance
$matcher = Xpressions::match();
Matchting a string
$matcher = Xpressions::match()->exact('foo');
var_dump($matcher->test('bar')); // -> false
var_dump($matcher->test('foo')); // -> true
Inline Matching
In some situations (like validation) you might want to match something in the start of the line and before the end of that line, in that case you might use begin() and end() methods. For example:
$matcher = Xpressions::match()->begin()->exact('bar')->end();
var_dump($matcher->test('foo bar')); // -> false
var_dump($matcher->test('bar foo')); // -> false
var_dump($matcher->test('bar')); // -> true
NOTE: without
begin()andend()all of the above tests will match (returning true), because whatever the matched in the start or the end of the line will return true unless you specified the begin and the end of the line (the whole text).
Matching an optional string
$matcher = Xpressions::match()->exact('foo')->maybe('bar')->exact('baz');
var_dump($matcher->test('foo')); // -> false
var_dump($matcher->test('foobar')); // -> false
var_dump($matcher->test('foobarbaz')); // -> true
var_dump($matcher->test('foobaz')); // -> true
Matching alphanumeric & underscores
$matcher = Xpressions::match()->word();
var_dump($matcher->test('!')); // -> false
var_dump($matcher->test('a')); // -> true
var_dump($matcher->test('1')); // -> true
var_dump($matcher->test('_')); // -> true
You may use
words()to match a one or more word characters.
You may use
nonWord()as an inverse to this method.
Matching a digit
$matcher = Xpressions::match()->digit();
var_dump($matcher->test('!')); // -> false
var_dump($matcher->test('a')); // -> false
var_dump($matcher->test('1')); // -> true
You may use
digits()to match a one or more word characters.
You may use
nonDigit()as an inverse to this method.
Matching any of a given values
$matcher = Xpressions::match()->any('foo', 'bar', 'baz');
var_dump($matcher->test('something')); // -> false
var_dump($matcher->test('foo')); // -> true
var_dump($matcher->test('bar')); // -> true
var_dump($matcher->test('baz')); // -> true
Advanced Examples
Matching an email address
$matcher = Xpressions::match()
->begin() // match a line start
->oneOrMore(function($xpr) {
$xpr->word()->or('.');
})
->exact('@')
->words()
->oneOrMore(function($xpr) {
$xpr->maybe('.')
->word();
})
->end(); // match a line end
var_dump($matcher->test('invalid')); // ->false
var_dump($matcher->test('me@example.com')); // ->true
Interested in more advanced examples?
Many of examples will be written and documented soon!, but you can view tests/XpressionsTest.php for now.
Related Skills
node-connect
342.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
85.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
342.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
342.5kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
