2012-09-27 45 views
0

说我有这个字符串具体的正则表达式模式

<td><a href="/one-two-three/menus" title="test"</td> 
<td><a href="/one-two-three/menus/13:00 title="test"</td> 
<td><a href="/one-two-three/schedule/could be multiple delimiters/14:00 title="test"</td> 

我想用正则表达式来获得2分的结果,只有当满弦与/one-two-three开始,以hh:mm结束。例如,我想:

/one-two-three/menus/13:00 
/one-two-three/schedule/could be multiple delimiters/14:00 

我已经试过正则表达式/one-two-three[\s\S]+?[0-9][0-9]:[0-9][0-9]

但是这给

Found 2 matches: 
1./one-two-three/menus" title="test"</td>  <td><a href="/one-two-three/menus/13:00 
2./one-two-three/schedule/could be multiple delimiters/14:00 

我明白为什么我得到的结果,但我的问题是什么模式可以我用于排除没有hh:mm的零件,其中可以有/one-two-threehh:mm之间的任意数量的分隔符

回答

2

如果HTML结构i对你很重要,regex is the wrong approach

否则(如果你可以在任何地方,只要它是由"包围匹配字符串),你可能想试试这个:

/one-two-three[^"]+?[0-9][0-9]:[0-9][0-9] 

[\s\S]基本上意味着任何字符。但你只想要不是"的字符,因为这标志着路径的结束。

+0

谢谢你。 HTML在我的案例中并不重要,尽管我之前已经看到过这个链接。大多数建议的解析器(例如HTML敏捷包等)在处理几页时都很好,但在处理数百或数千响应时速度太慢。 :) – user3357963

+0

嗯,该网页的重点不在于,使用正则表达式来解析HTML“不够优雅”。这实际上是不可能的,因为HTML不是一种常规语言。如果您的问题在HTML结构方面非常有限,那么只有使用正则表达式才能解决HTML问题。 –

0

尝试

搜索 ".*\"/{one-two-three}{.*}{[0-9][0-9]:[0-9][0-9]}.*"

\1 = one-two-three \2 = middle parts \3 = hh:mm

更换,如果你有\1\3取代它会消除中间部分

希望这有助于:)