/ / Regex: return false, ak 3 symboly + - * nasledujú navzájom - java, android, regex

Regex: návrat false ak 3 symboly + - * nasledujú navzájom - java, android, regex

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ď č. 1

Môž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.

RegEx Demo

V jazyku Java používajte:

final String regex = "^(?!.*[+*-]{2})\S+";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(input);