【发布时间】: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(扩展正则表达式)