Php 正则表达式的起始和结束,中间没有(其他)字符串 我试图在一个HTML文件中匹配字符串,这些字符串是用特定的字符串开始和结束的,中间没有另一个特定的字符串。更具体地说,他们从 $start = "<br/>\s*[0-9]{1,4}(\.|\:|\))+"; 应该包含所有的东西,但中间要有断线。

Php 正则表达式的起始和结束,中间没有(其他)字符串 我试图在一个HTML文件中匹配字符串,这些字符串是用特定的字符串开始和结束的,中间没有另一个特定的字符串。更具体地说,他们从 $start = "<br/>\s*[0-9]{1,4}(\.|\:|\))+"; 应该包含所有的东西,但中间要有断线。,php,regex,string,Php,Regex,String,目前,我的中间正则表达式如下所示: $middle = "[^(<br/>)]+"; $start = "<br/>\s*[0-9]{1,4}(\.|\:|\))+"; $middle = //What do I put here? $end = "\?"; $regex = "#".$start.$middle.$end."#"; preg_match_all($regex, $text, $hits); $middle=“[^()]+”; 最终代码如下所示: $

目前,我的中间正则表达式如下所示:

$middle = "[^(<br/>)]+";
$start = "<br/>\s*[0-9]{1,4}(\.|\:|\))+";
$middle = //What do I put here?
$end = "\?";
$regex = "#".$start.$middle.$end."#";
preg_match_all($regex, $text, $hits);
$middle=“[^(
)]+”;
最终代码如下所示:

$middle = "[^(<br/>)]+";
$start = "<br/>\s*[0-9]{1,4}(\.|\:|\))+";
$middle = //What do I put here?
$end = "\?";
$regex = "#".$start.$middle.$end."#";
preg_match_all($regex, $text, $hits);
$start=“
\s*[0-9]{1,4}(\.\124;\:\ 124;\)+”; $middle=//我在这里放什么? $end=“\?”; $regex=“#”。$start.$middle.$end。”#“; preg_match_all($regex、$text、$hits);
如何创建我的中间正则表达式以仅匹配不包含特征线的文本?

如果使用,应该得到预期的结果(尽管有):

(?:(?!
)*
这基本上是类固醇的*
(?:…)
是一个“非捕获”组,用于将所有内容组合在一起以进行
*
重复
(?!…)
是一个消极的前瞻,这意味着它确保在当前位置之前找不到

。因此,此表达式确保没有

字符,然后匹配下一个字符,然后重复



在您的表达式中,
[^(
)]+
,您误解了角色类的工作方式。也就是说,只要任何字符不在以下字符集中,就将其匹配1+次:
b
r
/
。可能会解释得更好。

如果您希望匹配

之间的任何html文本:

  • 如果不包含任何其他

    ,则此表达式有效:

    \s*([0-9]{1,4})[.:)]((?:(?!)*)\?

  • 可能包含

    但您只对删除

    的文本感兴趣,那么您可能应该匹配

    之间的所有内容,如下所示:

    \s*([0-9]{1,4})[.:)]([^?]*)\?

然后用字符串替换或其他方法删除


在每种情况下,第一组将匹配您的项目符号编号,第二组将匹配项目符号后面的问题,假设这是您感兴趣的内容。上述表达式允许不一致的标记,如





至少两次转义反斜杠。而 $MULTION/CODE >不应该有锚——因为它在中间。如果是HTML解析,则使用DOMDocument。请发布一个你正在使用的HTML示例,并让我们知道你想用它做什么。很好的答案解决了我的问题,感谢你解释我的表达式不起作用的原因。也是一个很好的答案,与选择的答案非常相似。你设法弄明白了我试图从html中提取的是什么,这是我的道具。演示也非常棒,非常感谢。