显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
显然,您可以使用|(管道?)来表示OR,但是是否也有一种方法来表示AND呢?
具体来说,我希望匹配包含某个短语的所有文本段落,但没有特定的顺序。
当前回答
除了接受的答案
我将提供一些实际的例子,让你们中的一些人更清楚地了解事情。例如,我们有这三行文本:
[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
其他回答
除了接受的答案
我将提供一些实际的例子,让你们中的一些人更清楚地了解事情。例如,我们有这三行文本:
[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
下面是and运算符的可能“形式”:
以下面的正则表达式为例:
如果我们想匹配没有“e”字符的单词,我们可以这样做:
/\b[^\We]+\b/g
\W表示不是“单词”字符。 ^\W表示“字”字符。 [^\We]表示“单词”字符,而不是“e”。
看一下实际情况:没有e的单词
和“正则表达式的运算符”
我认为这个模式可以用作正则表达式的“和”操作符。
一般而言,如果:
A = not A B =非B
然后:
[^AB] = not(A or B)
= not(A) and not(B)
= a and b
差集
所以,如果我们想在正则表达式中实现差分集的概念,我们可以这样做:
a - b = a and not(b)
= a and B
= [^Ab]
AND运算符在RegExp语法中是隐式的。 相反,必须使用管道指定OR操作符。 下面的RegExp:
var re = /ab/;
意思是字母a和字母b。 它还适用于组:
var re = /(co)(de)/;
它的意思是基团co和基团de。 将(隐式的)AND替换为OR需要以下几行代码:
var re = /a|b/;
var re = /(co)|(de)/;
使用非消耗正则表达式。
典型的(例如Perl/Java)表示法是:
(? = expr)
这意味着“匹配expr,但之后继续在原始匹配点进行匹配。”
你想做多少就做多少,这将是一个“并且”。例子:
(?=匹配这个表达式)(?=也配这个)(?=哦,还有这个)
如果需要保存其中的一些数据,甚至可以在非消费表达式中添加捕获组。
如果你使用Perl正则表达式,你可以使用正向预测:
例如
(?=[1-9][0-9]{2})[0-9]*[05]\b
是否有大于100且能被5整除的数