正则表达式疑问记录

如下字符串:
【</span><span style=\"FONT-FAMILY: &#39;宋体&#39;; LETTER-SPACING: 0pt; COLOR: rgb(0,0,0); FONT-SIZE: 10.5pt; mso-spacerun: &#39;yes&#39;\">药理学</span><span style=\"FONT-FAMILY: &#39;宋体&#39;; LETTER-SPACING: 0pt; COLOR: rgb(0,0,0); FONT-SIZE: 10.5pt; mso-spacerun: &#39;yes&#39;\">】

我想要的结果是: 【药理学】

代码如下:
	public static String deleteBetweenByRegex(String str, String open,
			String close) {

		if (StringUtils.isNotBlank(open) && StringUtils.isNotBlank(close)
				&& StringUtils.isNotBlank(str)) {

			StringBuffer sb = new StringBuffer().append('(').append(open)
					.append(".+").append(close).append(')');

			String regex = sb.toString();
			
			System.out.println(regex);//输出结果:(<.+>)
			
			Pattern p = Pattern.compile(regex);

			Matcher m = p.matcher(str);

			int i = 0;

			while (m.find()) {
				str = StringUtils.remove(str, m.group(1));
				System.out.println(i++);
			}
		}

		return str;
	}


调用此方法返回结果却是: 【】

此后我无意间加了一个问号'?',如下:
			StringBuffer sb = new StringBuffer().append('(').append(open)
					.append(".+?").append(close).append(')');

结果输出正常: 【药理学】,虽然结果对了,但不明白为何加上'?'就可以了?!

猜你喜欢

转载自songjianyong.iteye.com/blog/2223422