84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我是新手。我试图在下面的任一行中找到全名,并且没有 Obituary for
Obituary for
<h2>Obituary for John Doe</h2> <h1>James Michael Lee</h1>
我的正则表达式是这样的。
(<h1>(.+?)<\/h1>|<h2>Obituary\sfor\s(.+?)<\/h2>)
我得到的仍然是 John Doe 的 讣告。如何删除 的 讣告?
讣告。如何删除 的 讣告?
的
你能在不使用正则表达式的情况下做这样的事情吗?
/** * @description : Function extracts names from html header tags * @example : "Obituary for John DoeJames Michael Lee" -> ["John Doe", "James Michael Lee"] * @param $html string * @return []string : list of full names */ function extractFullNames($html) { $regex = '/(.*?)/'; preg_match_all($regex, $html, $matches); $names = $matches[1]; $names = array_map('trim', $names); $names = array_map('strip_tags', $names); $names = array_map('strtolower', $names); $names = array_map('ucwords', $names); $names = array_map('removeObituary', $names); return $names; } /** * @description : Function used to remove "Obituary For" if present * @example : "Obituary For John Doe" -> "John Doe" * @param $name string * @return string : name without "Obituary For" */ function removeObituary($name) { $name = str_replace("Obituary For ", "", $name); return $name; } // Test cases $html = 'Obituary for John Doe James Michael Lee'; $names = extractFullNames($html); $expected = ['John Doe', 'James Michael Lee']; echo "Expected: " . implode(', ', $expected) . "\n"; echo "Actual: " . implode(', ', $names);
条条大路通罗马,你或许可以这样做:
|2>Obituary\sfor\s)\K[^> 请在 regex101 查看此演示。匹配项将位于 $out[0] 中。 \K 重置 开头报告比赛。有关详细信息,请参阅 SO 正则表达式常见问题解答。
请在 regex101 查看此演示。匹配项将位于 $out[0] 中。
$out[0]
\K 重置 开头报告比赛。有关详细信息,请参阅 SO 正则表达式常见问题解答。
\K
你能在不使用正则表达式的情况下做这样的事情吗?
条条大路通罗马,你或许可以这样做: