Мне нужно регулярное выражение для моего PHP-скрипта, которое поможет мне манипулировать некоторыми строками с помощью preg_replace
.
Например, скажем, у меня есть следующая строка:
myvar = first_value AND var2 = second_value
Я хотел бы преобразовать его в:
myvar = 'first_value' AND var2 = 'second_value'
Однако я также хотел бы, чтобы он игнорировался, когда вокруг значения уже есть одинарная кавычка. Таким образом, myvar = first_value AND var2 = 'second_value'
станет myvar = 'first_value' AND var2 = 'second_value'
, а не myvar = 'first_value' AND var2 = ''second_value''
.
Я также хотел бы иметь дело с пробелами внутри подстрок, когда вокруг значения уже есть одинарная кавычка. Таким образом, myvar = first_value AND var2 = 'second value'
станет myvar = 'first_value' AND var2 = 'second value'
, а не myvar = 'first_value' AND var2 = 'second' value'
.
ПРИМЕЧАНИЕ. Строка никогда не будет содержать присвоение переменной со строковыми значениями без кавычек, в которых есть пробелы, т. е. myvar = first value
— это сценарий, который никогда не возникнет. Однако строка может содержать любой другой символ, даже специальные символы, например. myvar = &%$@_imspecial_*
полностью действителен.
Код PHP, с которым я работал, выглядел примерно так, как показано ниже (#DontLugh):
$col_clause_str = "myvar = first_value AND var2 = second_value";
$replace_pattern_str = '/([\w\@\-]+)\s*(\=|\>|\>\=|\<|\<\=)\s*\'{0,1}([\w\@\.\:\+\-\/\|\{\}\[\]\~\%\$\*\!]+)\'{0,1}/i';
$replace_str = '\1 \2 \'\3\'';
$col_clause_str = preg_replace($replace_pattern_str, $replace_str, $col_clause_str);
Как я могу улучшить это регулярное выражение?!
Заранее спасибо.
EDIT: я обновил вопрос, чтобы он был более описательным.
$col_clause_str = "myvar = first_value AND var2 = second_value"; $replace_pattern_str = '/(?<==\s)([^\s\']+)/i'; $replace_str = '\1'; $col_clause_str = preg_replace($replace_pattern_str, $replace_str, $col_clause_str);
26.12.2012preg_replace
. 26.12.2012preg_replace
. Что вы получили на выходе, когда попробовали? 26.12.2012