正则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)sprimefaces组将匹配其第一个替代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组的例子