Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配PHP变量和字符串连接的正则表达式_Php_Regex_String_Variables_Pcre - Fatal编程技术网

匹配PHP变量和字符串连接的正则表达式

匹配PHP变量和字符串连接的正则表达式,php,regex,string,variables,pcre,Php,Regex,String,Variables,Pcre,我正在尝试构建一个正则表达式,它匹配不同类型的echo语句。。。。 “回声”一词已匹配 要匹配的示例模式 "hiii"; "how"."are"."you"; $var."abc"; "abc".$var; 'how'."how".$var; var的模式 /^[a-zA-Z_][a-zA-Z0-9_]*/ 我已经有一个模式匹配前2个模式 /((^"[^"]*"\.{0,1})*;)/ 您可以使用以下正则表达式执行此操作,而无需使用递归: ^“[^”]+”(\.“[^”]+”*$ 演示:正

我正在尝试构建一个正则表达式,它匹配不同类型的echo语句。。。。 “回声”一词已匹配

要匹配的示例模式

"hiii";
"how"."are"."you";
$var."abc";
"abc".$var;
'how'."how".$var;
var的模式

/^[a-zA-Z_][a-zA-Z0-9_]*/
我已经有一个模式匹配前2个模式

/((^"[^"]*"\.{0,1})*;)/

您可以使用以下正则表达式执行此操作,而无需使用递归:

^“[^”]+”(\.“[^”]+”*$


演示:

正则表达式不是万能的解决方案。例如,在本例中,很容易发现您想要解析PHP代码。就像你不应该用正则表达式解析HTML一样,你也不应该用正则表达式解析PHP


取而代之的是使用,它可以用来解析PHP表达式。

在两个给定的建议旁边,如果您正在寻找基于PHP PCRE的正则表达式来验证PHP的子集,那么可以通过为您正在寻找的令牌指定命名子模式来进行更结构化的验证。下面是一个示例性的正则表达式模式,它寻找这些模式,甚至对任何基于ascii的扩展单字节字符集(我认为这就是PHP实际处理它的方式,即使它在您的文件中是UTF-8)允许空白(PHP也会这样做):

输出:

'"hiii";' did match.
'"how"."are"."you";' did match.
'$var."abc";' did match.
'"abc".$var;' did match.
'\'how\'."how".$var;' did match.
演示:

相关的
  • (另一个子模式示例)

为什么您认为递归方法更好?你为什么要这么做?也许有更好的方法。@AmalMurali B因为表达式只需要在遇到一个点时重复。在阅读了您更新的问题后,我可以告诉您,正则表达式不是完成此任务的最佳方法。您最好使用实际的解析器。看一看。我完全同意你的看法,我在PHP中启动它后意识到了这一点,并尝试查看一些可用的解析器,但cudnt没有找到如何使其工作。。关于我的。。。在文本框中输入后,当用户单击提交按钮时,所有这些都需要在后台自动完成。谢谢,效果很好。。。我们可以在同一个注册中包含其他模式吗??[参见修改后的问题]但它不匹配“”;这就是我在开头提到*的原因,很抱歉没有给出足够的例子。。。基本上,我不会匹配php[尽可能]Genius提供的几乎所有类型的echo!我对php不是很在行,所以不能理解一些东西[但理解你的逻辑],你能告诉我更多关于这个模式的信息吗?我试着用谷歌搜索,但没有找到任何正确的答案……例如,你为什么使用这个功能,这是一个鲜为人知的功能,有趣而详细的答案。@Aamir:关于如何在PHP中编写字符串的所有内容都在PHP手册中进行了概述:-关于如何编写PCRE正则表达式的所有内容都在Perl文档中进行了概述(PCRE的目标是兼容):(很抱歉,阅读太多,正则表达式有时很难理解,至少这两个都是参考,因此您可以安全地依赖它们)非常感谢你的参考,兄弟。现在我理解得好多了,但为什么只有$var;不匹配??就我理解的相同模式应该能够匹配,但它不匹配…@Aamir:对我来说,它匹配:-我所做的就是添加它(并且使模式更具可读性,但这不应该改变它的行为。也可以通过编辑原始演示来尝试。我看到了tokenizer,我想这对我的项目的其他部分会很有用。但是我不知道如何使用w.r.t这一问题。。。
$lines = <<<'LINES'
"hiii";
"how"."are"."you";
$var."abc";
"abc".$var;
'how'."how".$var;
LINES;    

foreach (explode("\n", $lines) as $subject) {
    $result = preg_match($pattern, $subject);
    if (FALSE === $result) {
        throw new LogicException('PCRE pattern did not compile.');
    }
    printf("%s %s match.\n", var_export($subject, true), $result ? 'did' : 'did not');
}
'"hiii";' did match.
'"how"."are"."you";' did match.
'$var."abc";' did match.
'"abc".$var;' did match.
'\'how\'."how".$var;' did match.