正则表达式匹配变量

时间:2012-06-29 12:37:00

标签: php regex

我真的卡在这里根本不是因为我吮吸正规表达,...我认为这是一个非常棘手的问题,所以我正在寻求帮助:)

我的问题

foo = "bar"
$bar = foo
foo()
$foo = bar;
bar = foo() {}
$foo = array();

应匹配:

foo = "bar" -> match foo not bar
$bar = foo -> match foo not bar
foo() -> no match
$foo = bar; -> match bar not foo
bar = foo() {} -> match bar not foo
$foo = array(); -> no match

它应该匹配所有不是quotet的单词A-Za-z0-9_并且不以$开头或以a结尾(

非常感谢您的帮助!

修改

一个小例子来更好地解释我想要实现的目标:

<?php
/**
 * little script to explain better what im trying to achieve
 */
echo "\nSay Hi :P\n=========\n\n";

$reply = null;

while ("exit" != $reply) {

  // command
  echo "> ";

  // get input
  $reply = trim( fgets(STDIN) );

  // last char
  $last = substr( $reply, -1 );

  // add semicolon if missing
  if ( $last != ";" && $last != "}" ) {
    $reply .= ";";
  }

  /*
   * awesome regex that should add $ chars to words
   * to make using this more comfortable!
   */

  // output buffer
  ob_start();
  eval( $reply );
  echo $out = ob_get_clean();

  // add break
  if ( strlen( $out ) > 0 ) {
    echo "\n";
  }
}

echo "\n\nBye Bye! :D\n\n";
?>

关心马里奥

2 个答案:

答案 0 :(得分:2)

此表达式实际上与您的示例匹配。 See here

/(?<![$'"])\b([a-z_]+)\b(?!['"(])/i

答案 1 :(得分:1)

您将很难尝试使用正则表达式解析编程语言。当你开始得到更复杂的表达式时,正则表达式将变得不充分。

尽管如此,这是一个匹配所有示例的正则表达式:

(?<![^\s])\w+(?![^;\s])

您可以扩展它以满足您的需求。