import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		String regex = "(?<hex><#\\w+>)|(?<action>\\[[^]]*]\\([^]]*\\))|(?<text>[\\w!* ]+)";
		String string = "Some <#000000>*text* [<#ffffff>Some more](action: Other <#gradient>text) and **finally** some more <#000>text!";
		
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(string);
		
		while (matcher.find()) {
			if (matcher.group("hex") != null) {
				System.out.println("HEX - " + matcher.group("hex"));	
			}
			if (matcher.group("text") != null) {
				System.out.println("TEXT - " + matcher.group("text"));	
			}
			if (matcher.group("action") != null) {
				System.out.println("ACTION - " + matcher.group("action"));	
			}
		}
	}
}