Каков наилучший оптимизированный шаблон preg для этих данных?Требуется помощь в регулярных выражениях - PullRequest
0 голосов
/ 13 июля 2011

Мне нужна помощь с шаблоном php preg для извлечения содержимого из следующих данных:

<div class="box">
<div>
<a href="/;s=-w3NKGFjkswdkjbg0B;detail=person;id=937382/me">
<b>Smith, Johnny</b>
</a>
</div>
<div>
<a href="/;s=-w3NKGFjkswdkjbg0B/http%3aservice.myxyz.net/ch/cgi/g.fcgi/me/new?CUSTOMERNO=836327973&amp;t=i373u.1310541179.a1ecb28b&amp;TO=smithjohnny@gmail.com">smithjohnny@gmail.com</a>
</div>
<div>
<a href="/;s=-w3NKGFjkswdkjbg0B;edit=person;id=937382/me"><img src="/;m=is;f=gif89a;h=18;k=sdakjdk12eksack;w=18/it%3amfitmcsfe19/DiEDzr48XbZcjfyGLMKnzw.gif" alt="" width="18" height="18">
</a>
<a href="/;s=-w3NKGFjkswdkjbg0B;delete=person;id=937382/me">
<img src="/;m=is;f=gif89a;h=18;k=Dk3k-kVox-ads9Lopt-yBQ;w=18/it%3amfitmcsfe19/tHJTBPhousrElDf1x5aPvA.gif" alt="" width="18" height="18">
</a>
</div>

<div class="fitMlModuleLinec8fe6cf8">&nbsp;</div>

<div>
<a href="/;s=-w3NKGFjk4jkedkds8g0B;detail=person;id=327843287/me"></a>
</div>
<div>
<a href="/;s=-w3NKGFjk4jkedkds8g0B/http%3aservice.myxyz.net/ch/cgi/g.fcgi/me/new?CUSTOMERNO=98324826438&amp;t=de13929382.1310541179.a1ecb28b&amp;TO=iamtesting@gmail.com">iamtesting@gmail.com</a>
</div>
<div>
<a href="/;s=-w3NKGFjk4jkedkds8g0B;edit=person;id=327843287/me">
<img src="/;m=is;f=gif89a;h=18;k=cBoj9wS5Yp5345435EREg;w=18/it%3amfitmcsfe19/DiEDzr48XbZcjfyGLMKnzw.gif" alt="" width="18" height="18"></a> | 
<a href="/;s=-w3NKGFjk4jkedkds8g0B;delete=person;id=327843287/me">
<img src="/;m=is;f=gif89a;h=18;k=Dk3k-kVox-ads9Lopt-yBQ;w=18/it%3amfitmcsfe19/tHJTBPhousrElDf1x5aPvA.gif" alt="" width="18" height="18"></a>
</div>

<div class="fitMlModuleLinec8fe6cf8">&nbsp;</div>

<div>
<a href="/;s=-w3NKGsndqw21g0B;detail=person;id=83467836/me">
<b>Parker</b>
</a>
</div>
<div>
<a href="/;s=-w3NKGsndqw21g0B;edit=person;id=83467836/me">
<img src="/;m=is;f=gif89a;h=18;k=cBodejksa23KNKvUEREg;w=18/it%3amfitmcsfe19/DiEDzr48XbZcjfyGLMKnzw.gif" alt="" width="18" height="18"></a> | 
<a href="/;s=-w3NKGF6hSNhymOcg6uWbg0B;delete=person;id=83467836/me">
<img src="/;m=is;f=gif89a;h=18;k=Dk3k-kVox-ads9Lopt-yBQ;w=18/it%3amfitmcsfe19/tHJTBPhousrElDf1x5aPvA.gif" alt="" width="18" height="18"></a>
</div>

<div class="fitMlModuleLinec8fe6cf8">&nbsp;</div>
</div>
</div>

Приведенные выше данные выглядят так: http://i56.tinypic.com/t867ih.jpg

Ниже приведены условия:

  • Я хочу извлечь адреса электронной почты.
  • Если адрес электронной почты найден, проверьте имя ... если имя найдено получить имя человека для этого адреса электронной почты.
  • Если имя найдено и адрес электронной почты для этого лица не указан затем отбросьте данные.

Выходной массив должен выглядеть следующим образом:

Array(
[email#1]= array([name]='name'),
[email#2]= array([name]='name')
.
.
[email#n]= array([name]='name')   
)

Результат приведенных выше данных должен выглядеть следующим образом:

Array(
[smithjohnny@gmail.com]= array([name]='Smith, Johnny'),
[iamtesting@gmail.com]= array([name]='')
)

Пожалуйста, предложите мне наиболее оптимизированный preg_match для вышеуказанной проблемы.

1 Ответ

0 голосов
/ 13 июля 2011

Я делаю некоторые предположения о качестве ваших данных, но вы могли бы

preg_match("/<a href=\".+?\">([^<]+)@([^<]+)</a>", "smithjonny@gmail.com", $matches);
// $matches[1]='smithjonny'
// $matches[2]='gmail.com'

Это немного грубо, но если вы можете гарантировать, что href не содержит " (который должен быть исключен до &quot;), тогда он извлечет электронное письмо.

...