Php 对reg ex编译的修改

Php 对reg ex编译的修改,php,regex,class,names,Php,Regex,Class,Names,我使用下面的正则表达式来匹配PHP类、方法和函数名来验证它们,它最初来自PHP的站点(链接如下) 问题在于它与单字符类不匹配,例如: class a{} class b{} class A{} class B{} 正则表达式是: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* 现在我对正则表达式不是很在行,因为如果我能帮助的话,我选择不使用它们,但在这个场合,我选择了使用它们 我需要对正则表达式进行2个基本修改: 允许单个字符的 不能以\开头(但可以以一个

我使用下面的正则表达式来匹配PHP类、方法和函数名来验证它们,它最初来自PHP的站点(链接如下)


问题在于它与单字符类不匹配,例如:

class a{}
class b{}
class A{}
class B{}
正则表达式是:

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
现在我对正则表达式不是很在行,因为如果我能帮助的话,我选择不使用它们,但在这个场合,我选择了使用它们

我需要对正则表达式进行2个基本修改:

  • 允许单个字符的
  • 不能以\开头(但可以以一个下划线后跟一个字母开头)
有没有正则表达式大师可以帮我的


关于

这是可能的答案:

单字符类:

var_dump(preg_match('~^(_(?!_)|[a-zA-Z\x7f-\xff])[a-zA-Z0-9_\x7f-\xff]*$~', 'a')); // 1
单下划线类:

var_dump(preg_match('~^(_(?!_)|[a-zA-Z\x7f-\xff])[a-zA-Z0-9_\x7f-\xff]*$~', '_')); // 1
var_dump(preg_match('~^(_(?!_)|[a-zA-Z\x7f-\xff])[a-zA-Z0-9_\x7f-\xff]*$~', '__a')); //0
双下划线类:

var_dump(preg_match('~^(_(?!_)|[a-zA-Z\x7f-\xff])[a-zA-Z0-9_\x7f-\xff]*$~', '_')); // 1
var_dump(preg_match('~^(_(?!_)|[a-zA-Z\x7f-\xff])[a-zA-Z0-9_\x7f-\xff]*$~', '__a')); //0

“问题是它不匹配单字符类”——您发布的正则表达式确实匹配单字符类。哦,糟糕,在我的代码中,出于某种未知的原因,我省略了乘法器,其中的一个时刻。谢谢。@K6t:只是一个分隔符。你可以使用任何你喜欢的:
#
/
,等等,不好意思问!你能解释更多关于这个语法的每一个字符操作。。。或者你可以给我链接。。。。。我知道基本知识…
((?)|[a-zA-Z\x7f-\xff])
我想意思是
单下划线
(?!41;
向前看,确保没有第二个下划线
|
或一个分组字符,后跟
[…]中的任何字符。