菜鸟教程小白 发表于 2022-12-12 13:36:28

ios - 带有正则表达式捕获的 NSPredicate 总是得到 0 个结果


                                            <p><p>大家好,</p>

<p>我正在为将 <code>正则表达式</code> 放入 <code>NSPredicate</code> 中而摸不着头脑。</p>

<p>我想将我们所有的缩略图从 Documents 目录移动到 Caches 目录中并捕获所有我创建的正则表达式:<code>_thumb(@x)?\.jpg</code> .</p>

<p> <a href="https://regex101.com/r/wsuELK/1/" rel="noreferrer noopener nofollow">Here on regex101.com</a>你可以看到上面的正则表达式处理这个测试数据:</p>

<pre><code>grwior_thumb.jpg          &lt;- match
grwior.jpg
[email protected]    &lt;- match
vuoetrjrt.jpg
hafiruwhf_thumb.jpg       &lt;- match
[email protected]    &lt;- match
[email protected]    &lt;- match
hafiruwhf.jpg
</code></pre>

<p>但是当我把它放在代码中时,它什么都不匹配:</p>

<pre><code>NSError *error = nil;
NSFileManager *fileManager = ;

// Find and move thumbs to the caches folder
NSArray&lt;NSString *&gt; *mediaFilesArray = ;

NSString *regex = @&#34;_thumb(@x)?\\.jpg&#34;;
NSPredicate *thumbPredicate = ;

NSArray&lt;NSString *&gt; *thumbFileArray = ;
</code></pre>

<p><code>thumbFileArray</code> 总是有 0 个元素...</p>

<p>我做错了什么?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>使用 <code>MATCHES</code> 而不是 <code>ENDSWITH</code>,因为 <strong><code>ENDSWITH</code> 不会将表达式视为 <em>正则表达式</em ></strong>,但要确保匹配字符串开头的所有字符,因为 <code>MATCHES</code> 需要完整的字符串匹配,所以你需要以某种方式匹配 <code 之前的字符>_</code>.</p>

<p>使用</p>

<pre><code>NSString *regex = @&#34;.*_thumb(@x)?\\.jpg&#34;;
</code></pre>

<p>然后</p>

<pre><code>
</code></pre>

<p><code>.*</code> 将尽可能多地匹配除换行符以外的任何 0+ 字符。</p>

<p>注意,如果你只想匹配<code>2</code>或<code>3</code>,你不妨写<code></code>,不需要a <code>-</code> 这里是范围操作符。</p>

<p>您也可以将 <code>(@x)?</code> 替换为 <code>(?:@x)?</code>,即将捕获组更改为 <a href="https://stackoverflow.com/questions/3512471/what-is-a-non-capturing-group-what-does-a-question-mark-followed-by-a-colon" rel="noreferrer noopener nofollow">non-capturing</a> ,因为您似乎不需要稍后可以访问子匹配。如果这样做,请保留可选的 <em>capturing</em> 组。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 带有正则表达式捕获的 NSPredicate 总是得到 0 个结果,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/45298587/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/45298587/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 带有正则表达式捕获的 NSPredicate 总是得到 0 个结果