- 主题:regex是不是没有AND?
正则表达式匹配速度快,效率高
【 在 callmebbser 的大作中提到: 】
: 这种简单的逻辑,用简单的语言自带的逻辑运算就可以搞定,何必去弄晦涩难懂的正则
: 表达式?
:
: ...................
--
FROM 111.201.135.*
实际上是有and功能的,但这属于正则表达式比较高级的用法,你不会用而已。
另外各个应用程序、编程语言的正则表达式实现不同,有些比较弱的没实现这部分,比如 sed 。当然 sed 不愁这个,可以一行里写多个匹配组合起来,牺牲效率求实现。
【 在 wuduan 的大作中提到: 】
: 我对regex一点都不懂
: 只是在别的地方,匹配字符串的时候说可以用regex语法,
: 我找了半天也没找到AND
: ...................
--
FROM 111.201.135.*
用 (a.*b|b.*a) 能得出 a AND b的结果, 但这是有回溯的,匹配不到 a.*b还要再回头找一遍 b.*a
真正的【逻辑与】匹配是无回溯的,regex从头到尾扫一遍就知道是不是满足 a AND b,这就是他的诉求。
大多数 regex 实现是能做到的
【 在 moudy 的大作中提到: 】
: 你理解错了,AND在regex属于不用说默认就是
: OR才需要专门写出来
--
FROM 111.201.135.*
(?=.*word1)(?=.*word2)(?=.*word3)(?=.*word4)
这个正则在匹配的过程中只扫描一遍目标字符串,正是楼主的诉求
这叫“前向肯定零宽断言”
【 在 moudy 的大作中提到: 】
: 你这个匹配四个词间的and试试。复杂度n2增长啊
--
FROM 111.201.135.*
搞笑在哪儿,你来个不搞笑的
【 在 siegfried415 的大作中提到: 】
: 哥们,你太搞笑了。。。
--
FROM 111.201.135.*
GNU Emacs 、 Java 、 绝大部分 unix grep 、 less 、 more 、 .NET 、 PCRE 库、Perl 、PHP、 Python、Ruby、 sed 、 vi 这些都是传统 NFA 引擎的 regex
mawk 、 GNU emacs 是 POSIX NFA 引擎
GNU awk 、 GNU grep/egrep、 Tcl 这些是混合的,既有 NFA 也有 DFA
你说的 NFA 转成等价 DFA 的 regex 引擎在哪儿?
【 在 siegfried415 的大作中提到: 】
: NFA都可以转换成等价的DFA ,为啥要回溯?
--
FROM 111.201.135.*
你是指 (a.*b|b.*a) 吧。
是and 。
要么a前b后,要么a后b前,匹配成功的必然有a 和 b
【 在 a0123456789q 的大作中提到: 】
: 你举的例子明显是 or啊。
:
--
FROM 111.201.135.*
楼主要的是简单的与,不允许重叠的匹配
你说的这种用零宽断言就可以,效率更高,写法我前面给出了。
【 在 a0123456789q 的大作中提到: 】
: 比如楼主说要同时出现:
: 1) word
: 2) ordinal
: ...................
--
FROM 111.201.135.*