【问题标题】:Regex to add quotation marks to an unquoted expression正则表达式将引号添加到未引用的表达式
【发布时间】:2012-12-29 22:41:20
【问题描述】:

我正在尝试构建一个正则表达式,如果它没有被引用,它将使用 preg_replace 来引用表达式的右侧。

所以myvar = 3 变成了myvar = '3'。它应该只处理不带引号的连续字符串(因此,如果需要引用第一个字符串上的任何空格,例如 myvar = 3 5 将变为 myvar = '3' 5)。

我还希望它忽略任何带引号的字符串,因此不应修改 myvar = 'this is quoted'

到目前为止,我的代码如下:

$str = 'myvar = 3';
$regex = '/([\w\@\-]+) *(\=|\>|\>\=|\<|\<\=) *([\w]+)/i';
$replace = '\1 \2 \'\3\'';
$result = preg_replace($regex, $replace_str, $str);

我需要在$regex 中输入什么来完成这项工作?

【问题讨论】:

  • 这是您连续第五个正则表达式问题;所有这些似乎都与处理某种 JS 表达式的任务相同。看起来你依赖 Stackoverflow 来迭代地改进你没有经验的东西。也许是时候更深入地学习它了? * 另请参阅 Open source RegexBuddy alternativesOnline regex testing 了解一些有用的工具,或参阅 RegExp.info 了解更好的教程。
  • @mario 感谢您的资源,我会看看它们。我无法告诉你我从 stackoverflow 上的回复中学到了多少。因为我不是一个完整的菜鸟,我只需要一些方向。通常,当您对最佳方法获得良好响应时,您就可以更轻松地了解接下来要重点学习什么。
  • stackoverflow.com/a/4209320/1533203这就是你要找的东西?
  • @DavidHarris 谢谢。我认为这是我可以针对我需要做的事情进行调整的事情。

标签: php regex pcre


【解决方案1】:

您可以使用 preg_replace_callback,或者这可能有效(仅限正则表达式的右侧):

#([^\'\"])(\w+)([^\'\"])#

并像这样替换:

$exp = '#([^\'\"])(\w+)([^\'\"])#';
$str = 'This is unquoted';
$quoted = preg_replace($exp, '\'$1$2$3\'', $str); // should hopefully be 'This is unquoted' after. Not tested.

不过,这是一种很老套的解决方法。

编辑: 是的,不行。那么我会推荐 preg_replace_callback。

【讨论】:

  • $str 中的字符串应该是一个表达式,例如$str = 'myvar = 3'。我试图在表达式符号后引用字符串
  • 是的,我知道,这就是为什么我说“它只是正则表达式的右侧” :) 但这无论如何都不起作用 :( 抱歉,我试过了!
【解决方案2】:

我最终解决了以下问题:

$str = 'myvar = 3';
$regex = '/([\w\@\-]+) *(\=|\>|\>\=|\<|\<\=) *([^\s\']+)/i';
$replace = '\1 \2 \'\3\'';
$result = preg_replace($regex, $replace_str, $str);

我需要将其作为多步操作的一个步骤,因此我想使用此正则表达式来烘焙一个可以一次性完成所有操作的超级正则表达式。然而,事实证明preg_replace 也可以提供“搜索”和“替换”数组,因此我将其作为最终解决方案。这种方式也更容易掌握。

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2011-10-01
    • 2015-03-24
    • 2010-12-01
    相关资源
    最近更新 更多