PHP:使用正则表达式获取包含数据无效

PHP: use regex for get contain data not work

我的代码:

$data = '<div class="overlay">
                            <p>
            <a href="/name/nm0136797/?ref_=nv_cel_dflt_2" id="nameAdClick">
                                    <strong>Steve Carell</strong>
                                </a> »
                                <br>
                                #<strong>228</strong> on STARmeter
                            </p>
                        </div>'

正则表达式:

<a href="/name/.*/\?ref_=nv_cel_dflt_2".*>(.*)<\/a>

但不是return任何东西

此代码有时有效,有时无效!

Link 测试:https://regex101.com/r/snYqoC/1

正如 regex101.com 在您输入 link 您发布的报告错误时所说的那样,发生灾难性错误 see here(由于检查“.* " 在 "name/" 文字之后可能会捕获每个符号并因此使其失败)。

我已尝试通过将正则表达式的字符定义为仅匹配名称的字母 A 到 z 和数字 0 到 9 来解决此问题,并在文本中找到一个匹配项(如果有更多或需要其他一些特定的字符,我建议将它们指定在同一组中。

正则表达式是这样的:

<a href="/name/([A-Z]|[a-z]|[0-9])*/\?ref_=nv_cel_dflt_2".*>(.*)<\/a>

link为测试结果here

希望对你有用

您可以使用否定字符 类 而不是 "any character" 点来匹配。

~<a href="/name/[^/]*/\?ref_=nv_cel_dflt_2"[^>]*>\s*(.*?)\s*</a>~is

Pattern Demo

我会尽快添加 DomDocument / Xpath 替代方案。