Using string replacement ($& and $+) with findReplaceRegex (Confluence CLI tool)

Maarten van Hees June 10, 2012

Hello!

I've been using CLI for a few days now and it has greatly sped up the wiki migration i'm doing. Today i've been doing a lot of findReplace and findReplaceRegex to replace common things throughout very similiar articles, but i ran into a little problem wich i can't seem to figure out.

What i'm trying to achieve is this: i need to find strings that start with '@' and have all capital letters and then, with the match, i want to put <span class='myclass'> </span> around it to get some simple syntax highlighting. I'm not a big expert on regular expressions, but from what i can remember shouldn't it be possible to use string replacement on the right hand part of the findReplaceRegex action call parameter in order to re-use the matched string?

I've found this example at the documentation:

--findReplaceRegex "(a )(test)(.*):\$1\$3#\$2#"

Which seems to be doing something similiar to what i want, using the matched strings again to replace the existing ones. However, i can't get this to work. When i do it like this it just prints \$1\$3#\$2# as string in my article.

Any idea if it's possible to get it working? Would again be a great time saver. This is what i have so far:

--findReplaceRegex "(@)([A-Z):\$&"

Thanks in advance!


1 answer

1 accepted

1 vote
Answer accepted
Bob Swift OSS (Bob Swift Atlassian Apps)
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
June 10, 2012
  1. It helps a lot to get your regex working using this tool: http://www.regexplanet.com/advanced/java/index.html
  2. You need to watch out for special characters (command line and regex) - it can get confusing when you have to escape things and it depends on your OS what needs to be escaped (the example \$ is an escaped $ on unix)
  3. Quick look at your regex shows a few problems
    1. Don't you want [A-Z]* ? You are missing the closing ] and the * (0 or more characters)
    2. You need $1 on the replace
    3. I suspect you need some like:
      (@[A-Z]*):some text\$1some other text

Maarten van Hees June 13, 2012

Thanks for your answer, i've checked it out and i managed to get it working! Seems i wasn't far off, i kept using \$1 but it started working when i stopped using the backslash. This works for me:

--findReplaceRegex "(@[A-Z0-9]*):<span class='quaestor_syntax'>$1</span>"

Thanks again for your help!

Bob Swift OSS (Bob Swift Atlassian Apps)
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
June 13, 2012

Good, for Windows, you don't need to escape the $ like for unix.

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events