Advertisement
Guest User

Untitled

a guest
Mar 7th, 2019
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. SELECT dbo.getEmailAddresses('this is misc andrew@g.com')
  2.  
  3. --output andrew@g.com
  4.  
  5. SELECT dbo.getEmailAddresses('this is misc andrew@g.com and a medium text returning %John@acme.com')
  6. --output andrew@g.com; John@acme.com
  7.  
  8. CREATE FUNCTION [dbo].[getEmailAddresses] (@Str varchar(8000))
  9. RETURNS varchar(8000) AS
  10. BEGIN
  11.  
  12. declare @i int, @StartPos int,@AtPos int,@EndPos int;
  13. declare @MailList varchar(8000);
  14. declare @MailTempl varchar(100);
  15.  
  16.  
  17. SET @MailList=NULL;
  18. SET @MailTempl='[A-Za-z0-9_.-]'; --allowing symbols in e-mail not including @
  19.  
  20. SET @AtPos=PATINDEX('%'+@MailTempl+'@'+@MailTempl+'%',@Str)+1;
  21. While @AtPos>1
  22. begin
  23. --go left
  24. SET @i=@AtPos-1;
  25. while (substring(@Str,@i,1) like @MailTempl) SET @i=@i-1;
  26. SET @StartPos=@i+1;
  27.  
  28. --go right
  29. SET @i=@AtPos+1;
  30. while (substring(@Str,@i,1) like @MailTempl) SET @i=@i+1;
  31. SET @EndPos=@i-1;
  32.  
  33. SET @MailList=isnull(@MailList+';','')+Substring(@Str,@StartPos,@EndPos-@StartPos+1);
  34.  
  35. --prepare for the next round
  36. SET @Str=substring(@Str,@EndPos+1,LEn(@Str));
  37. SET @AtPos=PATINDEX('%'+@MailTempl+'@'+@MailTempl+'%',@Str)+1;
  38.  
  39. end;
  40.  
  41. RETURN @MailList;
  42.  
  43. END
  44.  
  45. create function getEmailAddresses
  46. (
  47. @test varchar(max)
  48. )
  49. returns varchar(max)
  50. As
  51. BEGIN
  52. declare @emaillist varchar(max)
  53. --SET @test=' this is it by it a@b.com dsdkjl dsaldkj a@b.com dasdlk c@bn.com dsafhjkf anand@p.com d fdajf s@s.com .'
  54.  
  55. ;WITH CTE as(
  56. select reverse(left(reverse(left(@test,CHARINDEX('.com',@test)+3)),charindex(' ',reverse(left(@test,CHARINDEX('.com',@test)+3))))) as emailids,
  57. right(@test,len(@test)-(CHARINDEX('.com',@test)+3)) rem
  58. union all
  59. select CASE WHEN len(rem)>2 then reverse(left(reverse(left(rem,CHARINDEX('.com',rem)+3)),charindex(' ',reverse(left(rem,CHARINDEX('.com',rem)+3))))) else 'a' end as emailids ,
  60. CASE WHEN len(rem) > 2 then right(rem,len(rem)-(CHARINDEX('.com',rem)+3)) else 'a' end rem
  61. from CTE where LEN(rem)>2
  62. )
  63. select @emaillist =STUFF((select ','+emailids from CTE for XML PATH('')),1,1,'')
  64. return @emaillist
  65. END
  66.  
  67. select dbo.getEmailAddresses('this is it by it a@b.com dsdkjl dsaldkj a@b.com dasdlk c@bn.com dsafhjkf anand@p.com d fdajf s@s.com .')
  68.  
  69. Declare @str varchar(max) = 'this is misc andrew@g.com and a medium text returning John@acme.com'
  70.  
  71. ;With Cte AS(
  72. SELECT
  73. Items = Split.a.value('.', 'VARCHAR(100)')
  74. FROM
  75. (
  76. SELECT
  77. CAST('<X>' + REPLACE(@str, ' ' , '</X><X>') + '</X>' AS XML) AS Splitdata
  78.  
  79. ) X
  80.  
  81. CROSS APPLY Splitdata.nodes('/X') Split(a) )
  82.  
  83. SELECT Email = STUFF((
  84. SELECT ';'+ Items
  85. FROM Cte
  86. Where Items
  87. LIKE '[A-Z0-9]%[@][A-Z]%[.][A-Z]%'
  88. FOR XML PATH('')),1,1,'')
  89.  
  90. andrew@g.com;John@acme.com
  91.  
  92. static void Main(string[] args)
  93. {
  94. string str = "this is misc andrew@g.com and a medium text returning John@acme.com";
  95.  
  96. var result = GetValidEmails(str).Aggregate((a,b)=>a+";" + b);
  97. Console.WriteLine(result);
  98. Console.ReadKey();
  99. }
  100.  
  101. private static List<string> GetValidEmails(string input)
  102. {
  103. List<string> lstValidEmails = new List<string>();
  104. string regexPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}$";
  105. foreach (string email in input.Split(' '))
  106. {
  107. if (new Regex(regexPattern, RegexOptions.IgnoreCase).IsMatch(email))
  108. {
  109. lstValidEmails.Add(email);
  110. }
  111. }
  112. return lstValidEmails;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement