我试图在给定字符串和第一个非字母数字字符之间提取文本。下面的代码有效但它使用标签而不是\ W.
$my_string = 'Auth code: 02452A</div>';
preg_match("~Auth code:(.*)</div>~",$my_string, $m);
print_r($m);
// shouldn't this work, too?
preg_match("~Auth code:(.*)\W~",$my_string, $m);
答案 0 :(得分:0)
Auth code:(.*)</div>
模式匹配Auth code:
文字子字符串,然后匹配并捕获除了换行符之外的任何0+字符的第1组,尽可能多的作为{ {1}}是一个贪婪的量词,然后匹配*
,一个强制性的文字子字符串。
如果您将</div>
替换为.*
(懒惰版),您仍然无法获得所需的结果,因为.*?
后面有一个空格,{{ 1}}匹配一个空格。因此,:
将匹配\W
和空格之间的空字符串。
获取所需子字符串的最佳方法是在.*?
之后添加:
(任意0+空格),然后使用匹配重置运算符 {{1}省略了到目前为止匹配的文本,并匹配1个或多个单词字符(它比任何字符懒得匹配到第一个非单词字符更有效):
\s*
<强>详情:
:
- 文字子字符串\K
- 0+ whitespaces ~Auth code:\s*\K\w+~
- 匹配重置运算符Auth code:
- 一个或多个单词字符请参阅PHP demo online:
\s*