正则expression式lookahead,lookbehind和primefaces组
我在我的正则expression式中find了这些东西,但是我没有弄清楚我可以使用它们。 有人有例子,所以我可以尝试了解他们是如何工作的?
(?!) - negative lookahead (?=) - positive lookahead (?<=) - positive lookbehind (?<!) - negative lookbehind (?>) - atomic group
例子
鉴于stringfoobarbarfoo
:
bar(?=bar) finds the 1st bar ("bar" which has "bar" after it) bar(?!bar) finds the 2nd bar ("bar" which does not have "bar" after it) (?<=foo)bar finds the 1st bar ("bar" which has "foo" before it) (?<!foo)bar finds the 2nd bar ("bar" which does not have "foo" before it)
你也可以结合他们:
(?<=foo)bar(?=bar) finds the 1st bar ("bar" with "foo" before it and "bar" after it)
定义
向前看正面(?=)
查找expression式A其中expression式B如下:
A(?=B)
向前看负面(?!)
查找expression式Aexpression式B不遵循:
A(?!B)
看后面的正面(?<=)
查找expression式A在expression式B之前:
(?<=B)A
看后面的负面(?<!)
查找expression式Aexpression式B不在前面:
(?<!B)A
primefaces团(?>)
primefaces组是一个非捕获组,在组内的模式的第一次匹配之后抛出所有的替代方法,所以禁用回溯。
一个非primefaces组将允许回溯,它仍然会find第一个匹配,那么如果提前匹配失败,它会回溯并find下一个匹配,直到find整个expression式的匹配或者所有的可能性都被用尽。
-
expression式
(foo|foot)s
非primefaces组适用于foots
:- 匹配它的第一个替代
foo
,然后失败,因为s
不会立即跟随,并回到第二个select; - 匹配它的第二个替代
foot
,然后立即成功,然后停下来。
- 匹配它的第一个替代
-
应用于
foots
的expression式(?>foo|foot)s
primefaces组将匹配其第一个替代foo
,然后在s
不会立即跟随s
情况下失败,并禁用后退。
一些资源
Lookarounds是零宽度断言。 他们检查一个正则expression式(向前或向后的前后左右),find匹配成功或失败(根据是正还是负),并丢弃匹配的部分。 它们不消耗任何字符 – 跟在它们后面的正则expression式的匹配(如果有的话)将从相同的光标位置开始。
阅读regular-expression.info获取更多细节。
- 积极的前瞻:
句法:
(?=REGEX_1)REGEX_2
仅当REGEX_1匹配时才匹配; 在匹配REGEX_1之后,匹配被丢弃,searchREGEX_2从相同的位置开始。
例:
(?=[a-z0-9]{4}$)[az]{1,2}[0-9]{2,3}
REGEX_1是[a-z0-9]{4}$
,它匹配四个字母数字字符,后跟行尾。
REGEX_2是[az]{1,2}[0-9]{2,3}
,它匹配一个或两个字母,后跟两个或三个数字。
REGEX_1确保string的长度确实是4,但不会消耗任何字符,以便在同一位置searchREGEX_2。 现在REGEX_2确保string匹配一些其他规则。 如果没有预见,它会匹配三到五个string。
- 消极的向前看
句法:
(?!REGEX_1)REGEX_2
仅当REGEX_1不匹配时才匹配; 在检查REGEX_1之后,searchREGEX_2从相同的位置开始。
例:
(?!.*\bFWORD\b)\w{10,30}$
超前部分检查string中的FWORD
,如果发现它则失败。 如果找不到FWORD
,则FWORD
成功,接下来的部分validationstring的长度在10到30之间,它只包含单词字符a-zA-Z0-9_
后视与前视相似:只是看在当前光标位置后面。 一些像javascript这样的正则expression式不支持隐藏断言。 而支持它的大多数风格(PHP,Python等)都要求隐藏部分具有固定的长度。
- 一旦令牌匹配,primefaces组基本上丢弃/忘记组中随后的令牌。 检查此页面的primefaces组的例子