gpt4 book ai didi

php - 正则表达式帮助(适用于 PHP)

转载 作者:行者123 更新时间:2023-12-04 06:28:01 24 4
gpt4 key购买 nike

我正在研究一种供我个人使用的“开发”语言。我根本不打算让它先进(虽然我不知道以后会发生什么),但是我遇到了一个问题。

我对 RegExp 不是很有经验,我想用它来检查代码的任何部分定义了一个新变量或正在运行的函数。在这种情况下,我需要一个 RegExp 来检查用户是否正在定义一个变量。

所以,假设我有一个这样的部分: $abcd = 5

现在,RegExp 应该满足以下条件:
- 它应该检查第一个字母是否是“$”(这很简单:“\$”)
- 现在,“$”后面的字母(我们称它们为变量名)是问题所在。多变的
名称可以包含字母 [a-z, A-Z]、数字 [0-9] 和下划线 [_]
- 接下来,变量名和“=”之间的空格可以无限长(它可以
是一个空格 ( ) 或数百万个空格 - 这应该没有区别
- 然后是等号(这也很容易 - "\=")
- 同第三个等号后空格
- 最后是变量值。不应该对此进行 RegExp 验证。

提前致谢!

最佳答案

您不想为这样的任务使用正则表达式。它会很快变成一场噩梦。你想要的是一个简单的语法和一个递归下降的解析器。

话虽如此,这样的事情应该有效:

/\$[a-zA-Z0-9_]+\s*=\s*[0-9]+$/

这只会匹配您为变量分配数字的情况。如果您想分配其他值,您将不得不使正则表达式更加复杂(明白我的意思是它变成了一场噩梦吗?:))。例如,如果您想为变量分配一个字符串值,则正则表达式将有所不同。您还必须考虑转义引号和串联等内容。用正则表达式做这些事情是非常困难的。

函数调用和变量定义的简单语法如下所示:
<program>             ::= { <statement> }
<statement> ::= <function-call> | <variable-assignment>
<function-call> ::= <identifier>, '(', [ <parameter-list> ], ')'
<identifier> ::= <valid-starting-char>, { <valid-char> }
<valid-starting-char> ::= [A-Za-z_]
<valid-char> ::= [A-Za-z]
<parameter-list> ::= <identifier>, { ',', <identifier> }
<variable-assignment> ::= '$', <identifier>, '=', <value>
<value> ::= <number> | <string>
<number> ::= <digit>, { <digit> }
<string> ::= '"', ( { <character> | <escaped-character> } ), '"'
<character> ::= .
<escaped-character> ::= '\', <character>

此语法不考虑串联、带小数值的数字(即小数点后)和负数。但这很简单,应该给你一个很好的起点。有很多教程会告诉您如何创建 recursive-descent来自 EBNF 的解析器.您仍然需要标记您的输入。

关于php - 正则表达式帮助(适用于 PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5795845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com