Php 正则表达式从另一个正则表达式提取电子邮件地址

Php 正则表达式从另一个正则表达式提取电子邮件地址,php,regex,Php,Regex,我有一段包含另一个正则表达式的文本 示例文本: ...<rege>!^.*$!mailto:asdf@adsfsdaf.com!</rege>... 这不起作用: $patterns[] = '/<rege>!\^\.\*\$!(.*)!<\/rege>/'; $patterns[]='/!\^\.\*\$!(.*)!/'; 想法?试试这个: $patterns[] = '/<rege>!\^\.\*\$!([^<]

我有一段包含另一个正则表达式的文本

示例文本:

...<rege>!^.*$!mailto:asdf@adsfsdaf.com!</rege>...
这不起作用:

    $patterns[] = '/<rege>!\^\.\*\$!(.*)!<\/rege>/';
$patterns[]='/!\^\.\*\$!(.*)!/';
想法?

试试这个:

$patterns[] = '/<rege>!\^\.\*\$!([^<]*)!<\/rege>/';
$patterns[]='/!\^\.\*\$!([^要在“”中包含\项,必须将其加倍,如下所示:

$patterns[] = '/<rege>!\\^\\.\\*\\$!(.*)!<\\/rege>/';
$patterns[]='/!\\^\.\\*\\$!(!)/;
我还认为,您可能希望取消此匹配,因为您希望正确捕获电子邮件,即使搜索文本中多次出现类似结构,因此:

$patterns[] = '/<rege>!\\^\\.\\*\\$!(.*?)!<\\/rege>/';
$patterns[]='/!\\^\.\*\\$!(.*?!/';

您需要避开反斜杠:

<?php

$sample = "<rege>!^.*$!mailto:asdf@adsfsdaf.com!</rege>";
preg_match("/<rege>!\\^\\.\\*\\$!(.*)!<\/rege>/",$sample,$matches);

print_r($matches);
?>


???这不是真的,如果是双引号字符串,而不是Steve.hm.使用的单引号。你是对的,似乎只有在单引号之前或字符串末尾才需要双反斜杠来获得文字反斜杠。但是在其他任何地方使用双反斜杠也只会产生一个反斜杠,而且更为有利姐姐,我试了第二个,效果很好!谢谢Kamil!!
<?php

$sample = "<rege>!^.*$!mailto:asdf@adsfsdaf.com!</rege>";
preg_match("/<rege>!\\^\\.\\*\\$!(.*)!<\/rege>/",$sample,$matches);

print_r($matches);
?>