解析mailTo的php正则表达式
我有以下html源字符串:解析mailTo的php正则表达式,php,regex,Php,Regex,我有以下html源字符串: <a href="mailto:abcd@test.com?body=This%20is%20the%20body%20-123-&subject=Subject%20Text&Content-Type=text/plain">Reply To Post</a> 我想从上面的字符串中提取: 在mailto:之后和之前的电子邮件地址 身体 主题 任何关于正则表达式的帮助都将不胜感激。提前谢谢。试试这个 $m = preg_m
<a href="mailto:abcd@test.com?body=This%20is%20the%20body%20-123-&subject=Subject%20Text&Content-Type=text/plain">Reply To Post</a>
我想从上面的字符串中提取:
$m = preg_match("/mailto:(.+?)\?/");
它匹配单词mailto
,后跟一个冒号,后跟一个包含任何字符
的捕获组(括号),一次或多次+
不贪婪(?-它将使捕获尽可能短),后跟一个(转义的)问号(\?
)试试这个
$m = preg_match("/mailto:(.+?)\?/");
它匹配单词
mailto
,后跟一个冒号,后跟一个包含任何字符
的捕获组(括号),+
一次或多次不贪婪地匹配(-它将使捕获尽可能短),后跟一个(转义的)问号(\?
)第二部分不需要正则表达式,国际海事组织
类似于:($s
是以下代码中href
的值)
实际上,如果您确定字符串以完全相同的方式显示,您也可以从索引的偏移量“:“直到索引的”?”获取子字符串。第二部分不需要正则表达式,国际海事组织 类似于:(
$s
是以下代码中href
的值)
实际上,如果您确定字符串以完全相同的方式显示,您也可以从索引的偏移量“:“直到索引的”?”中获取子字符串。没有在PHP中尝试过它,但它在以下情况下运行良好:
“mailto:([\w%.+-]+?@[\w.-]+?)(?:[?&](?:body=(.*?)| subject=(.*?)[\w-]+=*?)+?”
这将导致以下捕获组:
- 1:电子邮件地址
- 2:主体
- 3:主题
不过,您可能需要做一些更密集的测试,因为我不确定是否已获得所有有效的邮件地址。没有在PHP中尝试过,但在以下情况下效果良好:
“mailto:([\w%.+-]+?@[\w.-]+?)(?:[?&](?:body=(.*?)| subject=(.*?)[\w-]+=*?)+?”
这将导致以下捕获组:
- 1:电子邮件地址
- 2:主体
- 3:主题
不过,您可能需要做一些更深入的测试,因为我不确定是否拥有所有有效的邮件地址。这将假定您只有一个mailto链接:
// $str will be your string content from the question
if (preg_match('/"mailto:([^"]+?)/', $str, $matches) && false !== ($info = parse_url($matches[1]))) {
$emailAddress = $info['path'];
$emailParameters = array();
if (isset($info['query'])) {
parse_str($info['query'], $emailParameters);
}
var_dump($emailAddress, $emailParameters);
}
它从
“mailto:
匹配到第一个结束引号,并使用解析url
完成其余操作。这将假定您只有一个mailto链接:
// $str will be your string content from the question
if (preg_match('/"mailto:([^"]+?)/', $str, $matches) && false !== ($info = parse_url($matches[1]))) {
$emailAddress = $info['path'];
$emailParameters = array();
if (isset($info['query'])) {
parse_str($info['query'], $emailParameters);
}
var_dump($emailAddress, $emailParameters);
}
它从
“mailto:
匹配到第一个结束引号,并使用parse_url
完成其余部分。我认为Regex是一个过量的变量。问题中的字符串看起来像是可以解析为查询字符串。检查我的答案..我认为正则表达式有点过头了。问题中的字符串看起来可以解析为查询字符串。检查我的答案。>
不是真实字符串的一部分(我在编辑之前得到了字符串)。这些都是由于堆栈溢出的报价标记出错造成的。试图解决这个问题。是的,很好。虽然我不会在这里使用索引。还有一件事需要解决:您忘记了根本没有参数的情况(以防可能发生)。>
不是真正字符串的一部分(我在编辑之前得到了字符串)。这些都是由于堆栈溢出的报价标记出错造成的。试图解决这个问题。是的,很好。虽然我不会在这里使用索引。还有一件事需要解决:你忘记了根本没有参数的情况(以防发生)。啊,好主意。使用parse\u url()
比在这里重新发明轮子要容易得多,尽管parse\u str()
应该足够了。啊,好主意。使用parse_url()
比在这里重新发明轮子容易得多,尽管parse_str()
应该足够了。模式只捕获电子邮件,而不是OP要求的测试。模式只捕获电子邮件,而不是OP要求的测试。