Dúfam, že dostanem pomoc v spoločnosti Regex. Myslím, že by to nemalo byť také zložité pre ľudí, ktorí sú oboznámení s Regexom. Máme text, v ktorom tieto 3 symboly + - * nemôžu byť dodržané navzájom. Napríklad Regex by mal vrátiť falošný, ak text obsahuje:
- -t2ext
++
text - + Text
+-
text - t * ext
+*
text - t5e-XT
--
text - te-XT
-+
text - t5ex-t
-*
tex-t - te5xt
**
text - t8ext
*-
te9xt - te77 * xt
*+
te * xt
Snažil som sa vyriešiť pomocou negovania ^
, ale nemohol som nájsť správne riešenie Catastrophic Backtracking
chyba. Ďakujeme za váš čas a úsilie.
odpovede:
1 pre odpoveď č. 1Môžete použiť negatívny vzhľad vyhľadávania:
^(?!.*[+*-]{2})S+
(?!.*[+*-]{2})
je negatívny lookahead zlyhať zápas, ak sa dva vstupné symboly objavia na vstupe kdekoľvek.- Použite vyššie v
MULTILINE
Režim, ak zodpovedáte každému vstupu v samostatných riadkoch.
V jazyku Java používajte:
final String regex = "^(?!.*[+*-]{2})\S+";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(input);