Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式应该匹配链接文本和未链接文本_Regex - Fatal编程技术网

Regex 正则表达式应该匹配链接文本和未链接文本

Regex 正则表达式应该匹配链接文本和未链接文本,regex,Regex,我有一个正则表达式: <li><i>(?:<a.*?>)?(.*)(?:<.*?>)?</i></li> (?) 或者不带标记,如下所示: <li><i>42nd Street</i></li> 第42街 没有标记,正则表达式工作得很好,问题是,在第一个示例中,我得到了以下匹配: Hi there</a> 你好 我读过关于用(?:regex)忽略分组的文

我有一个正则表达式:

<li><i>(?:<a.*?>)?(.*)(?:<.*?>)?</i></li>
  • (?)
  • 或者不带
    标记,如下所示:

    <li><i>42nd Street</i></li>
    
    第42街 没有
    标记,正则表达式工作得很好,问题是,在第一个示例中,我得到了以下匹配:

    Hi there</a>
    
    你好 我读过关于用
    (?:regex)
    忽略分组的文章,但我不知道为什么它坚持要包含结束
    标记,什么regex会忽略结束
    标记,所以我只会在那里得到Hi

    你捕获的
    (.*)
    是贪婪的,而
    (?:)?
    之后,它是可选的,因此
    (.*)
    将始终包含
    。要解决此问题,请将
    *
    更改为
    *?
    ,使其为惰性(匹配尽可能少的字符:

    <li><i>(?:<a.*?>)?(.*?)(?:<.*?>)?</i></li>
    

  • (?:

    谢谢。我正在解析一些我知道不会改变的非常特定的HTML。
    <li><i>(?:<a.*?>)?(.*?)(?:<.*?>)?</i></li>