Nura111
asked on
HOe to remove chars with php function?
Im tring to extract the email from the next strin
I tried using str_replace but it didnt helped for "<" " >"
From: <email@name.com>
I tried using str_replace but it didnt helped for "<" " >"
From: <email@name.com>
Are you trying to extract just email or email@name.com?
ASKER
email@name.com
You can use a regular expression with groups to get the information around the @ sign. I'll show you an example in a moment.
http://www.laprbass.com/RAY_temp_nura111.php
<?php // RAY_temp_nura111.php
error_reporting(E_ALL);
echo "<pre>";
// TEST DATA
$st1 = 'From: <email@name.com>';
$st2 = 'From: email@name.com';
$rgx
= '#' // REGEX DELIMITER
. '\b' // WORD BOUNDARY
. '([^ ]*?)' // GROUP OF NON-BLANK CHARACTERS
. '([@]){1}' // GROUP OF EXACTLY ONE AT-SIGN
. '(.*?)' // GROUP OF ANYTHING
. '([.]){1}' // GROUP OF EXACTLY ONE DOT
. '([^ ]){2,6}' // GROUP OF NON-BLANK CHARACTERS (THE TLD)
. '\b' // THE WORD BOUNDARY
. '#' // REGEX DELIMITER
. 'i' // CASE-INSENSITIVE
;
// FIND THE EMAIL
$new = $st1;
$new = str_replace('<', NULL, $new);
$new = str_replace('>', NULL, $new);
var_dump($new);
preg_match($rgx, $new, $mat);
// SHOW THE WORK PRODUCT
var_dump($rgx);
var_dump($mat);
// FIND THE EMAIL
$new = $st2;
$new = str_replace('<', NULL, $new);
$new = str_replace('>', NULL, $new);
var_dump($new);
preg_match($rgx, $new, $mat);
// SHOW THE WORK PRODUCT
var_dump($rgx);
var_dump($mat);
This worked for me..
$remove = array("<",">");
$replace = array("","");
$string = "<email@name.com>";
echo str_replace($remove,$replace,$string);
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Sorry... Even though the other REGEX worked, this is a better solution. It puts the string length counts inside the parenthesized groups.
<?php // RAY_temp_nura111.php
error_reporting(E_ALL);
echo "<pre>";
// TEST DATA
$st1 = 'From: <email@name.com>';
$st2 = 'From: email@name.com';
$rgx
= '#' // REGEX DELIMITER
. '\b' // WORD BOUNDARY
. '([^ ]*?)' // GROUP OF NON-BLANK CHARACTERS
. '([@]{1})' // GROUP OF EXACTLY ONE AT-SIGN
. '(.*?)' // GROUP OF ANYTHING
. '([.]{1})' // GROUP OF EXACTLY ONE DOT
. '([^ ]{2,6})' // GROUP OF NON-BLANK CHARACTERS (THE TLD)
. '\b' // THE WORD BOUNDARY
. '#' // REGEX DELIMITER
. 'i' // CASE-INSENSITIVE
;
// FIND THE EMAIL
$new = $st1;
$new = str_replace('<', NULL, $new);
$new = str_replace('>', NULL, $new);
var_dump($new);
preg_match($rgx, $new, $mat);
// SHOW THE WORK PRODUCT
var_dump($rgx);
var_dump($mat);
// FIND THE EMAIL
$new = $st2;
$new = str_replace('<', NULL, $new);
$new = str_replace('>', NULL, $new);
var_dump($new);
preg_match($rgx, $new, $mat);
// SHOW THE WORK PRODUCT
var_dump($rgx);
var_dump($mat);
or simply:
<?php
$text = "hello my email is this.is@my.email.com. check out my other email too at other@email.net. email me at <hello.world@manyworlds.org>";
$pattern="/([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@([ ]+|)([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)/i";
preg_match_all($pattern, $text, $matches);
echo implode('<br />',$matches[0]);
?>
This seems to generate a false positive, accepting an email address for a TLD that does not exist (the longest TLD is "museum").
But that aside, you might find this article interesting. It shows a similar issue - grabbing domain names - and shows the process that a programmer might use to develop the regular expression, with iterative development and testing.
https://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_7830-A-Quick-Tour-of-Test-Driven-Development.html
Best of luck with your project, ~Ray
But that aside, you might find this article interesting. It shows a similar issue - grabbing domain names - and shows the process that a programmer might use to develop the regular expression, with iterative development and testing.
https://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_7830-A-Quick-Tour-of-Test-Driven-Development.html
Best of luck with your project, ~Ray
<?php // RAY_temp_rationalboss.php
error_reporting(E_ALL);
// THE TEST CASE
$text = "hello my email is this.is@my.email.com. check out my other email too at other@email.net. email me at <hello.world@manyworlds.org>";
// AN ADDENDUM TO THE TEST CASE
$text .= '<a href="mailto:ray@gmail.com">email me</a> but not with a bogus@emailaddress.fladderap';
$pattern="/([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@([ ]+|)([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)/i";
preg_match_all($pattern, $text, $matches);
echo implode('<br />',$matches[0]);
ASKER
I'm already working with a valid email address but its inside the format I mentioned PranjalShah:
its not working and dont I need to remove the from also?
its not working and dont I need to remove the from also?
I also posted one if FROM: is part of the string. The code snippet I posted worked for me. Post the code you are trying.
ASKER
ok got it its was a problem because the string was changing by htmlspecailCars before so it didnt work