【问题标题】:Modifications to a reg-ex compilation对正则表达式编译的修改
【发布时间】:2011-07-04 05:17:03
【问题描述】:

我有以下正则表达式用于匹配 PHP 类、方法和函数名称来验证它们,它最初取自 PHP 的网站(链接如下)

问题是它不匹配单个字符类,例如:

class a{}
class b{}
class A{}
class B{}

正则表达式是:

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

现在我不擅长正则表达式,因为如果可以帮助我选择不使用它们,但这次我选择使用它们。

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

  • 允许单个字符的
  • 不能以 __ 开头(但可以以单个下划线后跟一个字母开头)

有没有正则表达式大师可以帮助我。

问候

【问题讨论】:

  • “问题是它不匹配单个字符类”---您发布的正则表达式匹配单个字符类。 ideone.com/m5iYR
  • 哦,我的错,在我的代码中,由于某种未知原因,我省略了乘数,其中之一。谢谢。

标签: php regex class names


【解决方案1】:

这是可能的答案:

单字符类:

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

【讨论】:

  • @K6t:只是一个分隔符。你可以使用任何你喜欢的:!#/
  • 不好意思问了!你能解释更多关于这个语法每个字符操作...或者你能给我链接吗.....我知道基础......
  • (_(?!_)|[a-zA-Z\x7f-\xff]) 我认为意味着(_ 单个下划线(?!_) 向前看并确保没有第二个下划线| 或单个字符分组,然后是[....] 中的任何字符
猜你喜欢
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多