Регулярное выражение: сопоставить один знак равенства с отрицательным прогнозом = - PullRequest
0 голосов
/ 23 января 2019

Я создаю что-то, что требует от пользователя ввода условий, а затем я проанализирую это с помощью PHP.Я хочу создать preg_replace, которое заменяет = на ==, но == остается нетронутым.

Примеры

a=b => a==b
a==b => a==b
a = b => a == b
a == b => a == b

Так что, в основном, если пользователь забывает, что условие нуждается == вместо =,система это тоже позволит.

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Вы можете использовать это регулярное выражение,

(?<![=!])=(?![=!])

, который гарантирует, что = будет выбран, только если ему не предшествует или не следует =, и замените его на ==

Демо

Примеры кодов PHP,

$arr = array("a=b", "a==b", "a = b", "a == b", "a!=b");
foreach($arr as $s) {
    echo $s, ' --> ', preg_replace('/(?<![=!])=(?![=!])/', '==', $s) , "\n";
}

печать

a=b --> a==b
a==b --> a==b
a = b --> a == b
a == b --> a == b
a!=b --> a!=b
0 голосов
/ 23 января 2019

Другой вариант - использовать положительный вид сзади, чтобы утверждать, что слева находится либо символ слова \w, либо символ пробела \s

(?<=[\w\s])=+

Regex demo | Php demo

Например:

$result = preg_replace('/(?<=[\w ])=+/', '==', $str)
0 голосов
/ 23 января 2019

Вы можете получить желаемый результат, выполнив следующие действия:

$string = "a == b" ;
$string = str_replace('==', '=', $string);
$string = str_replace('=', '==', $string);

var_dump($string);

Заменив все == на =, а затем заменив все = на ==

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...