Рассмотрим следующее регулярное выражение правило для замены текстаУсловный Regex заменить
$mystring = preg_replace('/'.$myitem.'[ab]/', "", $mystring);
Это заменит $myitem
с пробелом в $mystring
тогда и только тогда, когда за ним следует либо a
или b
.
Мое требование не заменить его на пустой символ, но заменить его:
a
если a
встречается или b
если b
встречается.
Я не могу сделать это в двух итераций, как:
$mystring = preg_replace('/'.$myitem.'a/', "a", $mystring);
$mystring = preg_replace('/'.$myitem.'b/', "b", $mystring);
, потому что первая итерация будет также иметь некоторые побочные эффекты на $mystring
делает второе правило бесполезно в этом случае.
Есть ли способ сделать эту условную замену в одной итерации?
редактируется в ответ на ответы
ОК я упростил свой вопрос, но здесь это фактическое правило регулярного выражения
'(?:(?<=^|\s)(?=\S|$)|(?<=^|\S)(?=\s|$))'.$myitem.'(?:(?<=^|\s)(?=\S|$)|(?<=^|\S)(?=\s|$)) *([ab])'
Сейчас в этой ситуации как подсчитать количество обратной ссылки, как я вижу некоторые условные группировки.
спасибо, но я упростил мое правило регулярного выражения. Теперь я отредактировал свой вопрос, чтобы включить текущее регулярное выражение. Можете ли вы рассказать, как я могу подсчитать номер обратной линии в этом случае? – oat
это регулярное выражение для замены всего слова, когда слова могут также содержать специальные символы, и, следовательно, простые границы слов могут не работать. Я взял это правило здесь: http://stackoverflow.com/questions/8267307/regex-expression-to-match-whole-word/8267757#8267757 – oat
Перед тем, как задать вопрос EDIT, у вас был образец ввода/вывода. Без этого трудно понять требования. ИМО также несправедливо менять вопрос после получения ответов. Если бы вопрос был упрощен, вы могли бы задать и новый вопрос. – anubhava