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 <- match
grwior.jpg
[email protected] <- match
vuoetrjrt.jpg
hafiruwhf_thumb.jpg <- match
[email protected] <- match
[email protected] <- match
hafiruwhf.jpg
</code></pre>
<p>但是当我把它放在代码中时,它什么都不匹配:</p>
<pre><code>NSError *error = nil;
NSFileManager *fileManager = ;
// Find and move thumbs to the caches folder
NSArray<NSString *> *mediaFilesArray = ;
NSString *regex = @"_thumb(@x)?\\.jpg";
NSPredicate *thumbPredicate = ;
NSArray<NSString *> *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 = @".*_thumb(@x)?\\.jpg";
</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]