public String analyzerAll(String sourceString) {
		String result = null;
		List<String> mentions = new ArrayList<String>();
		List<LinkLabel> links = new ArrayList<LinkLabel>();
		List<String> emoticons = new ArrayList<String>();
		ContentLabel contentLabel = new ContentLabel();

		//bad codes to repeat and copy/paste here, but anyway, I will not use this solution
		//because it is slow
		
		Matcher nameMatcher = namePattern.matcher(sourceString);
		while (nameMatcher.find()) {
			if (nameMatcher.group("name") != null) {
				log.debug("getting mention=" + nameMatcher.group("name"));
				mentions.add(nameMatcher.group("name"));
			}
		}
		if (!mentions.isEmpty()) {
			contentLabel.setMentions(mentions);
		}

		Matcher emMatcher = emPattern.matcher(sourceString);
		while (emMatcher.find()) {
			if (emMatcher.group("em") != null) {
				log.debug("getting em=" + emMatcher.group("em"));
				emoticons.add(emMatcher.group("em"));
			}
		}
		if (!emoticons.isEmpty()) {
			contentLabel.setEmoticons(emoticons);
		}

		Matcher urlMatcher = urlPattern.matcher(sourceString);
		while (urlMatcher.find()) {
			final String keyURL = urlMatcher.group("url");
			if (keyURL != null) {
				log.debug("getting link=" + keyURL);
				links.add(new LinkLabel(keyURL, (String) cacheHero.load(keyURL,
						new Callable<String>() {
							public String call() {
								return resourceFetchHero
										.getTitlefromURL(keyURL);
							}
						})));
			}
		}
		if (!links.isEmpty()) {
			contentLabel.setLinks(links);
		}
		result = jsonMapperHero.toJSON(contentLabel);
		return result;
	}