<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>regex Archives - Huahua&#039;s Tech Road</title>
	<atom:link href="https://zxi.mytechroad.com/blog/tag/regex/feed/" rel="self" type="application/rss+xml" />
	<link>https://zxi.mytechroad.com/blog/tag/regex/</link>
	<description></description>
	<lastBuildDate>Mon, 25 Oct 2021 06:55:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.8</generator>

<image>
	<url>https://zxi.mytechroad.com/blog/wp-content/uploads/2017/09/cropped-photo-32x32.jpg</url>
	<title>regex Archives - Huahua&#039;s Tech Road</title>
	<link>https://zxi.mytechroad.com/blog/tag/regex/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>花花酱 LeetCode 2047. Number of Valid Words in a Sentence</title>
		<link>https://zxi.mytechroad.com/blog/string/leetcode-2047-number-of-valid-words-in-a-sentence/</link>
					<comments>https://zxi.mytechroad.com/blog/string/leetcode-2047-number-of-valid-words-in-a-sentence/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Mon, 25 Oct 2021 06:47:43 +0000</pubDate>
				<category><![CDATA[String]]></category>
		<category><![CDATA[easy]]></category>
		<category><![CDATA[match]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[string]]></category>
		<guid isPermaLink="false">https://zxi.mytechroad.com/blog/?p=8637</guid>

					<description><![CDATA[<p>A sentence consists of lowercase letters ('a'&#160;to&#160;'z'), digits ('0'&#160;to&#160;'9'), hyphens ('-'), punctuation marks ('!',&#160;'.', and&#160;','), and spaces (' ') only. Each sentence can be broken&#8230;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/string/leetcode-2047-number-of-valid-words-in-a-sentence/">花花酱 LeetCode 2047. Number of Valid Words in a Sentence</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>A sentence consists of lowercase letters (<code>'a'</code>&nbsp;to&nbsp;<code>'z'</code>), digits (<code>'0'</code>&nbsp;to&nbsp;<code>'9'</code>), hyphens (<code>'-'</code>), punctuation marks (<code>'!'</code>,&nbsp;<code>'.'</code>, and&nbsp;<code>','</code>), and spaces (<code>' '</code>) only. Each sentence can be broken down into&nbsp;<strong>one or more tokens</strong>&nbsp;separated by one or more spaces&nbsp;<code>' '</code>.</p>



<p>A token is a valid word if:</p>



<ul><li>It only contains lowercase letters, hyphens, and/or punctuation (<strong>no</strong>&nbsp;digits).</li><li>There is&nbsp;<strong>at most one</strong>&nbsp;hyphen&nbsp;<code>'-'</code>. If present, it should be surrounded by lowercase characters (<code>"a-b"</code>&nbsp;is valid, but&nbsp;<code>"-ab"</code>&nbsp;and&nbsp;<code>"ab-"</code>&nbsp;are not valid).</li><li>There is&nbsp;<strong>at most one</strong>&nbsp;punctuation mark. If present, it should be at the&nbsp;<strong>end</strong>&nbsp;of the token.</li></ul>



<p>Examples of valid words include&nbsp;<code>"a-b."</code>,&nbsp;<code>"afad"</code>,&nbsp;<code>"ba-c"</code>,&nbsp;<code>"a!"</code>, and&nbsp;<code>"!"</code>.</p>



<p>Given a string&nbsp;<code>sentence</code>, return&nbsp;<em>the&nbsp;<strong>number</strong>&nbsp;of valid words in&nbsp;</em><code>sentence</code>.</p>



<p><strong>Example 1:</strong></p>



<pre class="wp-block-preformatted;crayon:false"><strong>Input:</strong> sentence = "cat and  dog"
<strong>Output:</strong> 3
<strong>Explanation:</strong> The valid words in the sentence are "cat", "and", and "dog".
</pre>



<p><strong>Example 2:</strong></p>



<pre class="wp-block-preformatted;crayon:false"><strong>Input:</strong> sentence = "!this  1-s b8d!"
<strong>Output:</strong> 0
<strong>Explanation:</strong> There are no valid words in the sentence.
"!this" is invalid because it starts with a punctuation mark.
"1-s" and "b8d" are invalid because they contain digits.
</pre>



<p><strong>Example 3:</strong></p>



<pre class="wp-block-preformatted;crayon:false"><strong>Input:</strong> sentence = "alice and  bob are playing stone-game10"
<strong>Output:</strong> 5
<strong>Explanation:</strong> The valid words in the sentence are "alice", "and", "bob", "are", and "playing".
"stone-game10" is invalid because it contains digits.
</pre>



<p><strong>Example 4:</strong></p>



<pre class="wp-block-preformatted;crayon:false"><strong>Input:</strong> sentence = "he bought 2 pencils, 3 erasers, and 1  pencil-sharpener."
<strong>Output:</strong> 6
<strong>Explanation:</strong> The valid words in the sentence are "he", "bought", "pencils,", "erasers,", "and", and "pencil-sharpener.".
</pre>



<p><strong>Constraints:</strong></p>



<ul><li><code>1 &lt;= sentence.length &lt;= 1000</code></li><li><code>sentence</code>&nbsp;only contains lowercase English letters, digits,&nbsp;<code>' '</code>,&nbsp;<code>'-'</code>,&nbsp;<code>'!'</code>,&nbsp;<code>'.'</code>, and&nbsp;<code>','</code>.</li><li>There will be at least&nbsp;<code>1</code>&nbsp;token.</li></ul>



<h2><strong>Solution 1: Brute Force</strong></h2>



<p>Time complexity: O(n)<br>Space complexity: O(1)</p>



<div class="responsive-tabs">
<h2 class="tabtitle">C++</h2>
<div class="tabcontent">

<pre class="crayon-plain-tag">// Author: Huahua
class Solution {
public:
  int countValidWords(string sentence) {
    stringstream ss(sentence);
    string word;
    int ans = 0;
    while (ss &amp;gt;&amp;gt; word) {      
      bool valid = true;      
      int hyphen = 0;
      int punctuation = 0;
      char p = ' ';
      for (char c : word) {
        if (c == '-') {          
          if (++hyphen &amp;gt; 1 || !isalpha(p)) {
            valid = false;
            break;
          }
        } else if (c == '!' || c == '.' || c == ',') {
          if (++punctuation &amp;gt; 1 || p == '-') {
            valid = false;
            break;
          }
        } else if (isalpha(c)) {          
          if (punctuation) {
            valid = false;
            break;
          }
        } else {
          valid = false;
          break;
        }
        p = c;
      }
      if (word.back() == '-') 
        valid = false;
      if (valid) ++ans;      
    }
    return ans;
  }  
};</pre>
</div></div>



<h2><strong>Solution 2: Regex</strong></h2>



<p>Time complexity: O(n^2)?<br>Space complexity: O(1)</p>



<div class="responsive-tabs">
<h2 class="tabtitle">Python</h2>
<div class="tabcontent">

<pre class="crayon-plain-tag"># Author: Huahua
class Solution:
  def countValidWords(self, sentence: str) -&gt; int:
    ans = 0
    for word in sentence.split():
      if word.strip() and re.fullmatch('^([a-z]+(-?[a-z]+)?)?[\.,!]?$', word.strip()):
        ans += 1
    return ans</pre>
</div></div>



<p></p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/string/leetcode-2047-number-of-valid-words-in-a-sentence/">花花酱 LeetCode 2047. Number of Valid Words in a Sentence</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/string/leetcode-2047-number-of-valid-words-in-a-sentence/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>花花酱 LeetCode 10. Regular Expression Matching</title>
		<link>https://zxi.mytechroad.com/blog/programming-language/leetcode-10-regular-expression-matching/</link>
					<comments>https://zxi.mytechroad.com/blog/programming-language/leetcode-10-regular-expression-matching/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Mon, 17 Sep 2018 15:59:41 +0000</pubDate>
				<category><![CDATA[Programming Language]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[hard]]></category>
		<category><![CDATA[matching]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[string]]></category>
		<guid isPermaLink="false">https://zxi.mytechroad.com/blog/?p=4007</guid>

					<description><![CDATA[<p>Problem Given an input string (s) and a pattern (p), implement regular expression matching with support for '.' and '*'. '.' Matches any single character. '*' Matches zero&#8230;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/programming-language/leetcode-10-regular-expression-matching/">花花酱 LeetCode 10. Regular Expression Matching</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1><strong>Problem</strong></h1>
<p>Given an input string (<code>s</code>) and a pattern (<code>p</code>), implement regular expression matching with support for <code>'.'</code> and <code>'*'</code>.</p>
<pre class="crayon:false ">'.' Matches any single character.
'*' Matches zero or more of the preceding element.
</pre>
<p>The matching should cover the <strong>entire</strong> input string (not partial).</p>
<p><strong>Note:</strong></p>
<ul>
<li><code>s</code> could be empty and contains only lowercase letters <code>a-z</code>.</li>
<li><code>p</code> could be empty and contains only lowercase letters <code>a-z</code>, and characters like <code>.</code> or <code>*</code>.</li>
</ul>
<p><strong>Example 1:</strong></p>
<pre class="crayon:false"><strong>Input:</strong>
s = "aa"
p = "a"
<strong>Output:</strong> false
<strong>Explanation:</strong> "a" does not match the entire string "aa".
</pre>
<p><strong>Example 2:</strong></p>
<pre class="crayon:false"><strong>Input:</strong>
s = "aa"
p = "a*"
<strong>Output:</strong> true
<strong>Explanation:</strong> '*' means zero or more of the precedeng element, 'a'. Therefore, by repeating 'a' once, it becomes "aa".
</pre>
<p><strong>Example 3:</strong></p>
<pre class="crayon:false"><strong>Input:</strong>
s = "ab"
p = ".*"
<strong>Output:</strong> true
<strong>Explanation:</strong> ".*" means "zero or more (*) of any character (.)".
</pre>
<p><strong>Example 4:</strong></p>
<pre class="crayon:false"><strong>Input:</strong>
s = "aab"
p = "c*a*b"
<strong>Output:</strong> true
<strong>Explanation:</strong> c can be repeated 0 times, a can be repeated 1 time. Therefore it matches "aab".
</pre>
<p><strong>Example 5:</strong></p>
<pre class="crayon:false"><strong>Input:</strong>
s = "mississippi"
p = "mis*is*p*."
<strong>Output:</strong> false
</pre>
<h1><strong>Solution 1: Recursion</strong></h1>
<p>Time complexity: O((|s| + |p|) * 2 ^ (|s| + |p|))</p>
<p>Space complexity: O(|s| + |p|)</p>
<p><div class="responsive-tabs">
<h2 class="tabtitle">C++</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">// Author: Huahua, 14 ms
class Solution {
public:
  bool isMatch(string s, string p) {
    return isMatch(s.c_str(), p.c_str());
  }
private:
  bool isMatch(const char* s, const char* p) {
    if (*p == '\0') return *s == '\0';
        
    // normal case, e.g. 'a.b','aaa', 'a'
    if (p[1] != '*' || p[1] == '\0') {
      // no char to match
      if (*s == '\0') return false;

      if (*s == *p || *p == '.')
        return isMatch(s + 1, p + 1);
      else
        return false;
    }
    else {
      int i = -1;
      while (i == -1 || s[i] == p[0] || p[0] == '.') {
          if (isMatch(s + i + 1, p + 2)) return true;
          if (s[++i] == '\0') break;
      }
      return false;
    }
    
    return false;
  }
};</pre><p></div></div></p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/programming-language/leetcode-10-regular-expression-matching/">花花酱 LeetCode 10. Regular Expression Matching</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/programming-language/leetcode-10-regular-expression-matching/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>花花酱 LeetCode 551. Student Attendance Record I</title>
		<link>https://zxi.mytechroad.com/blog/simulation/leetcode-551-student-attendance-record-i/</link>
					<comments>https://zxi.mytechroad.com/blog/simulation/leetcode-551-student-attendance-record-i/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Fri, 17 Aug 2018 10:02:09 +0000</pubDate>
				<category><![CDATA[Simulation]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[simulation]]></category>
		<category><![CDATA[string]]></category>
		<guid isPermaLink="false">https://zxi.mytechroad.com/blog/?p=3568</guid>

					<description><![CDATA[<p>Problem You are given a string representing an attendance record for a student. The record only contains the following three characters: &#8216;A&#8217; : Absent. &#8216;L&#8217; : Late.&#8230;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/simulation/leetcode-551-student-attendance-record-i/">花花酱 LeetCode 551. Student Attendance Record I</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><iframe width="500" height="375" src="https://www.youtube.com/embed/fZ8nkk220M4?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe></p>
<h1><strong>Problem</strong></h1>
<p>You are given a string representing an attendance record for a student. The record only contains the following three characters:</p>
<ol>
<li><b>&#8216;A&#8217;</b> : Absent.</li>
<li><b>&#8216;L&#8217;</b> : Late.</li>
<li><b>&#8216;P&#8217;</b> : Present.</li>
</ol>
<p>A student could be rewarded if his attendance record doesn&#8217;t contain <b>more than one &#8216;A&#8217; (absent)</b> or <b>more than two continuous &#8216;L&#8217; (late)</b>.</p>
<p>You need to return whether the student could be rewarded according to his attendance record.</p>
<p><b>Example 1:</b></p>
<pre class="crayon:false"><b>Input:</b> "PPALLP"
<b>Output:</b> True
</pre>
<p><b>Example 2:</b></p>
<pre class="crayon:false"><b>Input:</b> "PPALLL"
<b>Output:</b> False</pre>
<h1><strong>Solution1: Simulation</strong></h1>
<p>Time complexity: O(n)</p>
<p>Space complexity: O(1)</p><pre class="crayon-plain-tag">// Author: Huahua
// Running time: 3 ms
class Solution {
public:
  bool checkRecord(string s) {
    int a{0};
    int l{0};
    for(char c: s) {
        if (c == 'A') ++a;
        if (c == 'L') ++l;
        else l=0;
        if (a &gt; 1 || l &gt; 2) return false;
    }
    return true;
  }
};</pre><p></p>
<h1>Solution 2: Regex</h1>
<p></p><pre class="crayon-plain-tag">// Author: Huahua
// Running time: 6 ms
class Solution {
public:
  bool checkRecord(string s) {
    return !std::regex_search(s, std::regex("A.*A|LLL"));
  }
};</pre><p>&nbsp;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/simulation/leetcode-551-student-attendance-record-i/">花花酱 LeetCode 551. Student Attendance Record I</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/simulation/leetcode-551-student-attendance-record-i/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>花花酱 LeetCode 468. Validate IP Address</title>
		<link>https://zxi.mytechroad.com/blog/string/leetcode-468-validate-ip-address/</link>
					<comments>https://zxi.mytechroad.com/blog/string/leetcode-468-validate-ip-address/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Thu, 01 Mar 2018 11:42:20 +0000</pubDate>
				<category><![CDATA[String]]></category>
		<category><![CDATA[medium]]></category>
		<category><![CDATA[regex]]></category>
		<guid isPermaLink="false">http://zxi.mytechroad.com/blog/?p=1907</guid>

					<description><![CDATA[<p>题目大意：给你一个字符串，让你判断是否是合法的ipv4或者ipv6地址，都不合法返回Neighter. Write a function to check whether an input string is a valid IPv4 address or IPv6 address or neither. IPv4 addresses are canonically represented in&#8230;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/string/leetcode-468-validate-ip-address/">花花酱 LeetCode 468. Validate IP Address</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>题目大意：给你一个字符串，让你判断是否是合法的ipv4或者ipv6地址，都不合法返回Neighter.</p>
<p>Write a function to check whether an input string is a valid IPv4 address or IPv6 address or neither.</p>
<p><b>IPv4</b> addresses are canonically represented in dot-decimal notation, which consists of four decimal numbers, each ranging from 0 to 255, separated by dots (&#8220;.&#8221;), e.g.,<code>172.16.254.1</code>;</p>
<p>Besides, leading zeros in the IPv4 is invalid. For example, the address <code>172.16.254.01</code> is invalid.</p>
<p><b>IPv6</b> addresses are represented as eight groups of four hexadecimal digits, each group representing 16 bits. The groups are separated by colons (&#8220;:&#8221;). For example, the address <code>2001:0db8:85a3:0000:0000:8a2e:0370:7334</code> is a valid one. Also, we could omit some leading zeros among four hexadecimal digits and some low-case characters in the address to upper-case ones, so <code>2001:db8:85a3:0:0:8A2E:0370:7334</code> is also a valid IPv6 address(Omit leading zeros and using upper cases).</p>
<p>However, we don&#8217;t replace a consecutive group of zero value with a single empty group using two consecutive colons (::) to pursue simplicity. For example, <code>2001:0db8:85a3::8A2E:0370:7334</code> is an invalid IPv6 address.</p>
<p>Besides, extra leading zeros in the IPv6 is also invalid. For example, the address <code>02001:0db8:85a3:0000:0000:8a2e:0370:7334</code> is invalid.</p>
<p><b>Note:</b> You may assume there is no extra space or special characters in the input string.</p>
<p><b>Example 1:</b></p><pre class="crayon-plain-tag">&lt;b&gt;Input:&lt;/b&gt; &quot;172.16.254.1&quot;

&lt;b&gt;Output:&lt;/b&gt; &quot;IPv4&quot;

&lt;b&gt;Explanation:&lt;/b&gt; This is a valid IPv4 address, return &quot;IPv4&quot;.</pre><p><b>Example 2:</b></p><pre class="crayon-plain-tag">&lt;b&gt;Input:&lt;/b&gt; &quot;2001:0db8:85a3:0:0:8A2E:0370:7334&quot;

&lt;b&gt;Output:&lt;/b&gt; &quot;IPv6&quot;

&lt;b&gt;Explanation:&lt;/b&gt; This is a valid IPv6 address, return &quot;IPv6&quot;.</pre><p><b>Example 3:</b></p><pre class="crayon-plain-tag">&lt;b&gt;Input:&lt;/b&gt; &quot;256.256.256.256&quot;

&lt;b&gt;Output:&lt;/b&gt; &quot;Neither&quot;

&lt;b&gt;Explanation:&lt;/b&gt; This is neither a IPv4 address nor a IPv6 address.</pre><p><strong>Solution 1: String / Brute force </strong></p><pre class="crayon-plain-tag">// Author: Huahua
// Running time: 4 ms
class Solution {
public:
  bool isV4Num(string n) {
    if (n.length() &gt; 3 || n.empty()) return false;
    std::reverse(n.begin(), n.end());
    int a = 0;    
    int f = 1;
    for (char c : n) {
      if (!isdigit(c)) return false;
      if (c == '0' &amp;&amp; f &gt; 1) return false;
      a += (c - '0') * f;
      f *= 10;
    }
    return a &gt;= 0 &amp;&amp; a &lt;= 255;
  }
  
  bool isV6Num(string n) {
    if (n.length() &gt; 4 || n.empty()) return false;
    std::reverse(n.begin(), n.end());
    
    int a = 0;
    int f = 1;    
    for (char c : n) {      
      if (isdigit(c)) 
        a += (c - '0') * f;
      else if (c &gt;= 'a' &amp;&amp; c &lt;= 'f' || c &gt;= 'A' &amp;&amp; c &lt;= 'Z')
        a += (tolower(c) - 'a' + 10) * f;
      else
        return false;
      f *= 16;
    }
    
    return a &gt;= 0 &amp;&amp; a &lt; (1 &lt;&lt; 16);
  }
  
  string validIPAddress(string IP) {
    bool isIPv4 = true;
    bool isIPv6 = true;
    string cur;
    int seg = 0;
    for (char c: IP) {
      if (c == '.') { ++seg; isIPv6 = false; isIPv4 &amp;= isV4Num(cur); cur.clear(); }
      else if (c == ':') { ++seg; isIPv4 = false; isIPv6 &amp;= isV6Num(cur); cur.clear(); }
      else cur += c;
    }
    isIPv4 &amp;= isV4Num(cur) &amp;&amp; seg == 3;
    isIPv6 &amp;= isV6Num(cur) &amp;&amp; seg == 7;
    
    return isIPv4 ? "IPv4" : (isIPv6 ? "IPv6" : "Neither");
  }
};</pre><p>&nbsp;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/string/leetcode-468-validate-ip-address/">花花酱 LeetCode 468. Validate IP Address</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/string/leetcode-468-validate-ip-address/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
