【问题标题】:expression not matching regex表达式与正则表达式不匹配
【发布时间】:2016-03-08 21:32:47
【问题描述】:

grep (GNU grep) 2.16

给定以下字符串:已经很晚了,但我想要正则表达式_ _this!

grep '[a-zA-Z]+' 命中除了 '_! 字符之外的所有字符(好的)

grep '[a-zA-Z]+[a-zA-Z0-9_]*' 没有命中(在我的示例中regexp_ 应该匹配,但不是_this (nok)

总而言之,我需要禁止以非字母开头的单词,然后允许字母数字和'_'字符(0次或更多次)

我试过https://regex101.com,两个正则表达式都像expexted一样工作。 仅在我的 bash shell(以及我正在编写的 php 代码中)中,第二个正则表达式没有命中。

编辑:@anubhava #1 解决方案工作正常。 尽管如此,我还是想通过 php 代码来做到这一点:preg_match('/[a-zA-Z]\+[a-zA-Z0-9_]*/',$myString) 不起作用...

RE-EDIT:我误解了PHP preg_match的使用,抱歉

【问题讨论】:

  • 使用grep '[a-zA-Z]\+[a-zA-Z0-9_]*'grep -E '[a-zA-Z]+[a-zA-Z0-9_]*'
  • 您如何使用grep?它通常逐行运行,因此不会“命中”特定字符。
  • @anubhava ok thx,我想知道为什么我应该转义 + 而不是 * 呢?...
  • @miken32 可能不是正确的术语...我的意思是字符串匹配模式,而“反向”:模式“命中”字符串
  • grep 使用 BRE,其中 + 需要转义,除非您使用 -E(扩展正则表达式)

标签: php regex linux grep


【解决方案1】:

我创建了一个包含内容的虚拟文件:

regexp_
asdf
_this
R_

bash 命令(我添加了 ^):

grep '^[a-zA-Z]\+[a-zA-Z0-9_]' dummy

给了我结果:

regexp_
asdf
R_

在 PHP 中,正则表达式需要看起来像这样(我在 + 之前添加了 ^ 并删除了 \):

preg_match('/^[a-zA-Z]+[a-zA-Z0-9_]*/',$myString);

我希望这就是您所需要的。

【讨论】:

    猜你喜欢
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多