菜鸟教程小白 发表于 2022-12-12 14:38:28

ios - 正则表达式仅选择特殊字符包围的单词


                                            <p><p>我想写一个函数,它接受一个字符串并改变特殊字符中所有单词的颜色。例如:</p>

<blockquote>
<p>This is a String containing </p>
</blockquote>

<p>我想更改上面字符串中<code></code>和<code></code>的字体,因为它们都被特殊字符<code>[]</code>。 </p>

<p>我尝试过使用:</p>

<pre><code>NSMutableAttributedString * string = [initWithString:_txtPostDiscussion.text];

NSArray *words=;
for (NSString *word in words) {
    if ( &amp;&amp; &#34;] ) {
      NSRange range=];
       range:range];

      ;
    }
}
</code></pre>

<p>我也尝试使用正则表达式来获取特定特殊字符内的所有单词,但我无法制作这样的正则表达式。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果你想匹配<code></code>,我们首先需要找到起始<code>[</code>。这个括号对正则表达式有特殊的含义,所以在正则表达式中它必须用反斜杠“修饰”(转义),如下所示:<code>\[</code>。此外,反斜杠 <code>\</code> 本身在 Objective-C 字符串中具有特殊含义,因此也必须使用第二个反斜杠对其进行转义,并编写如下:<code>@"\\["</code>。或者,您可以使用 <code>escapedPatternForString</code> 方法为您进行转义。</p>

<pre><code>NSString *openTagPattern = ;
NSString *closeTagPattern = &#34;];
</code></pre>

<p>然后我们要找到几个不同的字符直到结束括号。语句“除 x 之外的任何字符”由 <code>[^x]</code> 编码,因此除了结束括号之外的任何字符都由 <code>[^\]]</code> 编码。该括号字符再次转义以按字面意思处理,并且在 Objective-C 字符串中您将编写 <code>@"[^\\]]"</code>。因为我们要查找 1 个或多个这样的字符,所以我们添加 <code>+</code>:</p>

<pre><code>NSString *tagTextPattern = +&#34;, closeTagPattern];
</code></pre>

<p>最后我们需要一个右括号。最终的正则表达式只是按顺序组合了这 3 种模式:</p>

<pre><code>NSString *pattern = [NSString stringWithFormat:@&#34;%@%@%@&#34;,
    openTagPattern,
    tagTextPattern,
    closeTagPattern];
</code></pre>

<p>然后您可以创建一个 NSRegularExpression 实例并调用 enumerateMatchesInString 或 matchesInString 来为您提供所有匹配项。每个匹配项都是一个 NSTextCheckingResult 对象,它有一个 <code>range</code> 属性来为原始属性字符串添加一个属性。</p>

<p>如果您知道标签文本仅限于字母、数字和下划线,则 <code>tagTextPattern</code> 可以简化为 <code>\w+</code>,即“一个或多个单词字符”,或者如果我们想要允许空格、制表符 (<code>\s</code>),则模式将是 <code>[\w\s]+</code>,即“一个或多个单词或空格字符”(不要忘记正确转义它们)。</p>

<p>一个常见的错误是尝试使用表达式 <code>\[.+\]</code>,即“开括号”、“再一个任意字符”和“右括号”。这是行不通的,因为匹配算法是贪婪的(匹配越长越好),并且对于 <code>.+</code> 子部分它实际上也会吃掉右括号,以及之后的所有其他内容标签(<code>]</code> 之后的文本),并可能将多个标签连接成一个巨大的单个标签,或者可能无法匹配最后一个 <code>]</code>。</code> p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 正则表达式仅选择特殊字符包围的单词,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/49208122/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/49208122/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 正则表达式仅选择特殊字符包围的单词