ali-eltaweel/expandr

There is no license information available for the latest version (1.0.1) of this package.

Shell-style Parameters Expansion

Maintainers

Package info

github.com/ali-eltaweel/expandr

pkg:composer/ali-eltaweel/expandr

Statistics

Installs: 5

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.1 2026-02-28 06:42 UTC

This package is auto-updated.

Last update: 2026-02-28 06:43:12 UTC


README

Shell-style Parameters Expansion

Installation

composer require ali-eltaweel/expandr

Usage

$expandr = new Expandr\Expandr([
  'name' => 'User'
]);

echo $expandr->processLine('Hello ${name}'); // Hello User

Substitution

$expandr = new Expandr\Expandr([
  'x' => 'x_x_x'
]);

echo $expandr->processLine('${x/x/|}'); // |_x_x    (replace first)
echo $expandr->processLine('${x//x/|}'); // |_|_|   (replace all)

Slicing

$expandr = new Expandr\Expandr([
  'chars' => 'abcdefgh'
]);

echo $expandr->processLine('${chars:0:4}'); // abcd
echo $expandr->processLine('${chars:2}'); // cdefgh
echo $expandr->processLine('${chars:-2}'); // gh

Right Trim

$expandr = new Expandr\Expandr([
  'path' => 'path/to/file.php'
]);

echo $expandr->processLine('Filename: ${path%.php}'); // Filename: path/to/file

Left Trim

$expandr = new Expandr\Expandr([
  'path' => 'path/to/file.php'
]);

echo $expandr->processLine('Filename: ${path##path/to/}'); // Filename: file.php

Case Transformation

$expandr = new Expandr\Expandr([
  'username' => 'user',
  'USERNAME' => 'USER',
]);

echo $expandr->processLine('Hello ${username^}'); // Hello User
echo $expandr->processLine('Hello ${username^^}'); // Hello USER
echo $expandr->processLine('Hello ${USERNAME,}'); // Hello uSER
echo $expandr->processLine('Hello ${USERNAME,,}'); // Hello user

Indirection

$expandr = new Expandr\Expandr([
  'a' => 'b',
  'b' => 'c',
  'c' => 'd'
]);

echo $expandr->processLine('${a}'); // b
echo $expandr->processLine('${!a}'); // c
echo $expandr->processLine('${!!a}'); // d
// and so on...

Default

$expandr = new Expandr\Expandr([
  'a' => 'b'
]);

echo $expandr->processLine('${a:+a is set}'), // a is set
echo $expandr->processLine('${b:-b is not set}'), // b is not set
echo $expandr->processLine('${b:?b is not set}'), // throws an error with message "b is not set"