java - Regex pattern for repeated words -


i new regex, learning now. have requirement this:

any string starts #newline# , ends #newline#. in between these 2 words, there (0 or more spaces) or (0 or more #newline#).

below example:

#newline#  #newline# #newline##newline# #newline##newline##newline#. 

how regex this?

i have tried this, not working

^#newline#|(\s+#newline#)|#newline#|#newline#$ 

your ^#newline#|(\s+#newline#)|#newline#|#newline#$ matches either #newline# @ start of string (^#newline#), or 1+ whitespaces followed #newline# ((\s+#newline#)), or #newline#, or (and never matches previous catches cases of #newline#) #newline# @ end of string (#newline#$).

you may match these strings

^#newline#(?:\s*#newline#)*$ 

or (if there should @ least 2 occurrences of #newline# in string)

^#newline#(?:\s*#newline#)+$                           ^ 

see regex demo.

  • ^ - start of string
  • #newline# - literal string
  • (?:\s*#newline#)* - 0 (note: replacing * + require @ least 1) or more sequences of
    • \s* - 0+ whitespaces
    • #newline# - literal substring
  • $ - end of string.

java demo:

string s = "#newline#  #newline# #newline##newline# #newline##newline##newline#"; system.out.println(s.matches("#newline#(?:\\s*#newline#)+")); // => true 

note: inside matches(), expression anchored, , ^ , $ can removed.


Comments