(\S*[\f\t\v\x85\p{Z}]?)(第[01234567890123456789○一二三四五六七八九十百千零壹贰叁肆伍陆柒捌玖拾佰仟]+[部册篇卷章回节集]([\f\t\v\x85\p{Z}]?\S*){0,2}){1,2}目的,找出文本中类似下面的字符串:
第004章 好友刘兰
正文 第二部 古声古色 第2节 变脸
尾声第5回回归按上面的写法处理效率很低,在2M的文本里找就得花20秒

解决方案 »

  1.   

    2M的文本不算小了,lz要求速度要多快?
      

  2.   

    加上 “?>” 和 “?:” 试试看,如:(?:\S*[\f\t\v\x85\p{Z}]?)(?:第[01234567890123456789○一二三四五六七八九十百千零壹贰叁肆伍陆柒捌玖拾佰仟]+[部册篇卷章回节集](?:[\f\t\v\x85\p{Z}]?\S*){0,2}){1,2}(?>\S*[\f\t\v\x85\p{Z}]?)(?>第[01234567890123456789○一二三四五六七八九十百千零壹贰叁肆伍陆柒捌玖拾佰仟]+[部册篇卷章回节集](?>[\f\t\v\x85\p{Z}]?\S*){0,2}){1,2}(?:(?>\S*[\f\t\v\x85\p{Z}]?))(?>第[01234567890123456789○一二三四五六七八九十百千零壹贰叁肆伍陆柒捌玖拾佰仟]+[部册篇卷章回节集](?>[\f\t\v\x85\p{Z}]?\S*){0,2}){1,2}?: 表示不捕获子串
    ?> 应该是表示原子组(将子表达式看作一个单位)
      

  3.   

    [\f\t\v\x85\p{Z}]?这算怎么一回事
    {0,2}){1,2} 这个又算怎么一回事你的目的不是很明确,是要做提取吗?但你提取的内容从你的描述里看不清楚,不知道哪些是你想要的,还是给个具体点的例子,然后给出你想要的结果,给你重新写下正则吧2M的文本用不到20秒的,你写的正则有问题,但不至于把效率降得那么多,把你现在用的代码也贴一下吧
      

  4.   

    先回答千年的,
    [\f\t\v\x85\p{Z}]?表示空白字符可能最多出现1次,不同于\s把换行符也算在内;
    {0,2}){1,2}这个里面有一个右括号,跟前面匹配的左括号表示一个单元。0xff:
    谢谢你的回复了,我先试下你的表达式。