显然,您可以使用|
(pipe?)表示OR
,但是也有一种表示AND
方法吗?
具体来说,我想匹配包含某个短语的全部但没有特定顺序的文本段落。
显然,您可以使用|
(pipe?)表示OR
,但是也有一种表示AND
方法吗?
具体来说,我想匹配包含某个短语的全部但没有特定顺序的文本段落。
Answers:
使用非消耗性的正则表达式。
典型的(即Perl / Java)表示法是:
(?=
expr)
这表示“ match expr,但此后继续在原始匹配点进行匹配”。
您可以根据需要执行任意多个操作,这将是一个“与”。例:
(?=match this expression)(?=match this too)(?=oh, and this)
如果需要在其中使用一些数据,甚至可以在非使用表达式中添加捕获组。
您需要像其他一些响应者所说的那样使用前行,但是前行必须考虑其目标词和当前匹配位置之间的其他字符。例如:
(?=.*word1)(?=.*word2)(?=.*word3)
在.*
第一先行让它符合它需要它得到“字词1”之前,无论多少个字符。然后重设比赛位置,第二个超前查找“ word2”。再次重置,最后部分匹配“ word3”;由于这是您要检查的最后一个单词,因此不必提前,但不会造成伤害。
为了匹配整个段落,您需要在两端固定正则表达式,并添加最后一个.*
以使用其余字符。使用Perl样式的表示法,将是:
/^(?=.*word1)(?=.*word2)(?=.*word3).*$/m
'm'修饰符用于多重模式;它使^
和$
在段落边界(正则表达式中的“行边界”)匹配。在这种情况下,请务必不要使用's'修饰符,该修饰符可使点元字符与换行符以及所有其他字符匹配。
最后,您要确保匹配整个单词,而不仅仅是较长单词的片段,因此需要添加单词边界:
/^(?=.*\bword1\b)(?=.*\bword2\b)(?=.*\bword3\b).*$/m
.*
用[\s\S]*
在JavaScript,如果你有新的线路为.
JavaScript中的正则表达式引擎不匹配,新的生产线,并且不能进行与改性剂
看这个例子:
我们有2个正则表达式A和B,我们想将它们都匹配,因此在伪代码中它看起来像这样:
pattern = "/A AND B/"
可以这样编写,而无需使用AND运算符:
pattern = "/NOT (NOT A OR NOT B)/"
在PCRE中:
"/(^(^A|^B))/"
regexp_match(pattern,data)
(?=expr)
不行。它似乎取决于实现。
^
regex语法中的意思不是“字符串开头”吗?
^
否定仅在字符类的开头。除非CMake所做的事情确实很时髦(以至于将其模式匹配语言称为“ regex”可能被误导或认为是错误的),否则我猜想它对您有用是一个孤立的事故。
您可以使用正则表达式执行此操作,但可能还会需要其他一些功能。例如,使用多个regexp并将它们组合在if子句中。
您可以使用标准正则表达式枚举所有可能的排列,如下所示(以任意顺序匹配a,b和c):
(abc)|(bca)|(acb)|(bac)|(cab)|(cba)
但是,如果您有多个术语,则这将导致很长且可能效率很低的正则表达式。
如果您使用的是扩展的正则表达式版本,例如Perl或Java,则它们有更好的方法来执行此操作。其他答案建议使用正向超前操作。
a(bc|cb)|b(ac|ca)|c(ab|ba)
。最重要的是,您可以在所有正则表达式中使用它。
AND运算符在RegExp语法中是隐式的。
必须使用管道指定OR运算符。
以下RegExp:
var re = /ab/;
指字母a
和字母b
。
它也适用于组:
var re = /(co)(de)/;
它表示小组co
和小组de
。
用OR替换(隐式)AND将需要以下几行:
var re = /a|b/;
var re = /(co)|(de)/;
除了接受的答案
我将为您提供一些实际示例,以使您中的一些人更加清楚。例如,假设我们有这三行文字:
[12/Oct/2015:00:37:29 +0200] // only this + will get selected
[12/Oct/2015:00:37:x9 +0200]
[12/Oct/2015:00:37:29 +020x]
在这里查看演示 DEMO
我们要在此处执行的操作是选择+号,但前提是它在两个数字之间加一个空格,并且在四个数字之前。这些是唯一的限制。我们将使用此正则表达式来实现它:
'~(?<=\d{2} )\+(?=\d{4})~g'
请注意,如果您分隔表达式,它将给您不同的结果。
或者,也许您想在标签之间选择一些文本...但是不选择标签!然后,您可以使用:
'~(?<=<p>).*?(?=<\/p>)~g'
对于此文本:
<p>Hello !</p> <p>I wont select tags! Only text with in</p>
在这里查看演示 DEMO