rspec/rules/S5994/java/rule.adoc

25 lines
992 B
Plaintext
Raw Normal View History

2021-04-28 16:49:39 +02:00
Possessive quantifiers in Regex patterns like below improve performance by eliminating needless backtracking:
----
?+ , *+ , ++ , {n}+ , {n,}+ , {n,m}+
----
2021-04-28 16:49:39 +02:00
But because possessive quantifiers do not keep backtracking positions and never give back, the following sub-patterns should not match only similar characters. Otherwise, possessive quantifiers consume all characters that could have matched the following sub-patterns and nothing remains for the following sub-patterns.
2021-04-28 16:49:39 +02:00
== Noncompliant Code Example
----
Pattern pattern1 = Pattern.compile("a++abc"); // Noncompliant, the second 'a' never matches
Pattern pattern2 = Pattern.compile("\\d*+[02468]"); // Noncompliant, the sub-pattern "[02468]" never matches
----
2021-04-28 16:49:39 +02:00
== Compliant Solution
----
Pattern pattern1 = Pattern.compile("aa++bc"); // Compliant, for example it can match "aaaabc"
Pattern pattern2 = Pattern.compile("\\d*+(?<=[02468])"); // Compliant, for example it can match an even number like "1234"
----