标签: nsregularexpression

如何捕获多个重复组?

我需要捕获相同模式的多个组.假设,我有一个以下字符串:

HELLO,THERE,WORLD
Run Code Online (Sandbox Code Playgroud)

我写了一个以下模式

^(?:([A-Z]+),?)+$
Run Code Online (Sandbox Code Playgroud)

我想要它做的是,捕获每一个单词,以便第1组是:"你好",第2组是"THERE"而第3组是"WORLD"我的正则表达式实际上只捕获最后一个,这是"世界".

我测试我的正则表达式在这里,我想与斯威夫特使用它(也许有斯威夫特一种方式来获得中间结果不知怎么的,这样我就可以使用它们?)

更新:我不想使用split.我现在只需要捕获所有匹配模式的组,而不仅仅是最后一组.

regex regex-group nsregularexpression regex-greedy swift

51
推荐指数
4
解决办法
6万
查看次数

如何在Objective C(NSRegularExpression)中编写正则表达式?

当我在PHP中测试时,我有这个正则表达式工作,但它在Objective C中不起作用:

(?:www\.)?((?!-)[a-zA-Z0-9-]{2,63}(?<!-))\.?((?:[a-zA-Z0-9]{2,})?(?:\.[a-zA-Z0-9]{2,})?)
Run Code Online (Sandbox Code Playgroud)

我试图逃避转义字符,但这也无济于事.我应该逃避任何其他角色吗?

这是我在Objective C中的代码:

NSMutableString *searchedString = [NSMutableString stringWithString:@"domain-name.tld.tld2"];
NSError* error = nil;

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(?:www\\.)?((?!-)[a-zA-Z0-9-]{2,63}(?<!-))\\.?((?:[a-zA-Z0-9]{2,})?(?:\\.[a-zA-Z0-9]{2,})?)" options:0 error:&error];
NSArray* matches = [regex matchesInString:searchedString options:0 range:NSMakeRange(0, [searchedString length])];
for ( NSTextCheckingResult* match in matches )
{
    NSString* matchText = [searchedString substringWithRange:[match range]];
    NSLog(@"match: %@", matchText);
}
Run Code Online (Sandbox Code Playgroud)

- 更新 -

此正则表达式返回(在PHP中)具有值"domain-name"和"tld.tld2"的数组,但在Objective C中,我只获得一个值:"domain-name.tld.tld2"

- 更新2 -

此正则表达式从字符串中提取"域名"和"TLD":

  • domain.com =(域名,com)
  • domain.co.uk =(域名,co.uk)
  • -test-domain.co.u =(test-domain,co)
  • -test-domain.co.uk- =(test-domain,co.uk)
  • -test-domain.co.uk =(test-domain,co)
  • -test-domain.co-m =(测试域)
  • -test-domain-.co.uk =(测试域)

它采用有效的域名(不以' - '开头或结尾,长度在2到63个字符之间),如果部分有效,则最多为TLD的两个部分(至少两个字符只包含字母和数字)

希望这个解释有所帮助

regex objective-c ios nsregularexpression

48
推荐指数
2
解决办法
8万
查看次数

捕获不在NSRegularExpression中工作的组

为什么此代码仅吐出整个正则表达式匹配而不是捕获组?

输入

@"A long string containing Name:</td><td>A name here</td> amongst other things"
Run Code Online (Sandbox Code Playgroud)

预期产出

A name here
Run Code Online (Sandbox Code Playgroud)

实际输出

Name:</td><td>A name here</td>
Run Code Online (Sandbox Code Playgroud)

NSString *htmlString = @"A long string containing Name:</td><td>A name here</td> amongst other things";
NSRegularExpression *nameExpression = [NSRegularExpression regularExpressionWithPattern:@"Name:</td>.*\">(.*)</td>" options:NSRegularExpressionSearch error:nil];

NSArray *matches = [nameExpression matchesInString:htmlString
                                  options:0
                                    range:NSMakeRange(0, [htmlString length])];
for (NSTextCheckingResult *match in matches) {
    NSRange matchRange = [match range];
    NSString *matchString = [htmlString substringWithRange:matchRange];
    NSLog(@"%@", matchString);
}
Run Code Online (Sandbox Code Playgroud)

代码取自Apple文档.我知道还有其他库可以做到这一点,但我想坚持使用内置的任务.

regex objective-c capture-group ios nsregularexpression

39
推荐指数
3
解决办法
2万
查看次数

检查字符串是否包含Swift中的特殊字符

我必须检测字符串是否包含任何特殊字符.我怎么检查呢?Swift是否支持正则表达式?

var characterSet:NSCharacterSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789")
if (searchTerm!.rangeOfCharacterFromSet(characterSet).location == NSNotFound){
    println("Could not handle special characters")
}
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的代码,但只有当我输入第一个字符作为特殊字符时它才匹配.

regex iphone ios nsregularexpression swift

26
推荐指数
5
解决办法
4万
查看次数

iOS正则表达式:未知的转义序列"\ |"

我收到了一个奇怪的警告,因此我的正则表达式搜索无效.这是行:

NSRange r = [HTML rangeOfString:@"\|(.*)\|" options:NSRegularExpressionSearch];
Run Code Online (Sandbox Code Playgroud)

哪个HTML字符串我确定包含上述正则表达式的单个匹配项.

警告仅在第一次出现"\ |"时出现,而不是两者都出现.

任何帮助深表感谢!

regex objective-c ios nsregularexpression

17
推荐指数
1
解决办法
1万
查看次数

正则表达式中\ b和\ s的区别

我正在学习在iOS的正则表达式,看到这个教程:http://www.raywenderlich.com/30288/nsregularexpression-tutorial-and-cheat-sheet

对于\ b,它读起来像这样:

\ b匹配单词边界字符,如空格和标点符号.to\b将匹配"to the moon"和"to!"中的"to",但它与"明天"不匹配.\ b对于"全字"类型匹配很方便.

和\ s:

\ s匹配空格,制表符和换行符等空格字符.你好\ s将在"嗯,你好!"中匹配"你好".

我有两个问题:

1) what is the difference between \s and \b? when to use which?

2) \b is handy for "whole word" type matching -> Don't understand the meaning..

需要一些关于这两个的指导.

regex ios nsregularexpression

13
推荐指数
1
解决办法
7804
查看次数

使用NSRegularExpression在iPhone上提取URL

我在我的iPhone应用程序上使用以下代码,从这里获取条带.html代码中的所有URL.

我只能提取第一个URL,但我需要一个包含所有 URL 的数组.我的NSArray没有为每个URL返回NSStrings,只返回对象描述.

如何arrayOfAllMatches以NSStrings的形式返回所有网址?

-(NSArray *)stripOutHttp:(NSString *)httpLine {

// Setup an NSError object to catch any failures
NSError *error = NULL;  

// create the NSRegularExpression object and initialize it with a pattern
// the pattern will match any http or https url, with option case insensitive

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"http?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?" options:NSRegularExpressionCaseInsensitive error:&error];

// create an NSRange object using our regex object for the first match in the string httpline
NSRange rangeOfFirstMatch = [regex …
Run Code Online (Sandbox Code Playgroud)

regex objective-c nsstring nsarray nsregularexpression

12
推荐指数
4
解决办法
2万
查看次数

使用NSDataDetector进行NSDate检测

我试图从UNKNOWN格式的NSString中获取NSDate ,所以我写了一个类似下面的函数

-(void)dateFromString:(NSString*)string {

    NSError *error = NULL;
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:(NSTextCheckingTypes)NSTextCheckingTypeDate error:&error];

    NSArray *matches = [detector matchesInString:string
                                         options:0
                                           range:NSMakeRange(0, [string length])];

    NSLocale* currentLoc = [NSLocale currentLocale];
    for (NSTextCheckingResult *match in matches) {
        if ([match resultType] == NSTextCheckingTypeDate) {
            NSLog(@"Date : %@", [[match date] descriptionWithLocale:currentLoc]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

除了一个地方外,它运作良好.

如果我调用

[self dateFromString:@"6/12"];
Run Code Online (Sandbox Code Playgroud)

它打印

日期:2014年6月12日,星期四,澳大利亚东部标准时间下午12:00:00

如果我打电话的话

[self dateFromString:@"13/12"];
Run Code Online (Sandbox Code Playgroud)

它打印

日期:2013年12月13日星期五下午12:00:00澳大利亚东部夏令时间

基本上,我希望函数表现一致.由于我住在澳大利亚,它应该在12月6日返回首次执行.第二次通话结果是正确的.

我在这做错了什么?

objective-c nsdate ios nsregularexpression nsdatadetector

9
推荐指数
1
解决办法
2446
查看次数

如何在具有可变宽度Unicode字符的Swift字符串上使用NSRegularExpression?

我无法NSRegularExpression在字符串上匹配模式,其中包含更宽的(?)Unicode字符.看起来问题是范围参数--Swift计算单个Unicode字符,而Objective-C将字符串视为由UTF-16代码单元组成.

这是我的测试字符串和两个正则表达式:

let str = "dogcow"
let dogRegex = NSRegularExpression(pattern: "d.g", options: nil, error: nil)!
let cowRegex = NSRegularExpression(pattern: "c.w", options: nil, error: nil)!
Run Code Online (Sandbox Code Playgroud)

我可以匹配第一个正则表达式没有问题:

let dogMatch = dogRegex.firstMatchInString(str, options: nil, 
                   range: NSRange(location: 0, length: countElements(str)))
println(dogMatch?.range)  // (0, 3)
Run Code Online (Sandbox Code Playgroud)

但是第二个失败了相同的参数,因为我发送它的范围(0 ... 7)不足以涵盖整个字符串,只要NSRegularExpression有关:

let cowMatch = cowRegex.firstMatchInString(str, options: nil, 
                   range: NSRange(location: 0, length: countElements(str)))
println(cowMatch.range)  // nil
Run Code Online (Sandbox Code Playgroud)

如果我使用不同的范围,我可以使匹配成功:

let cowMatch2 = cowRegex.firstMatchInString(str, options: nil, 
                    range: NSRange(location: 0, length: str.utf16Count))
println(cowMatch2?.range)  // (7, 3)
Run Code Online (Sandbox Code Playgroud)

但后来我不知道如何从字符串中提取匹配的文本,因为该范围超出了Swift字符串的范围.

regex objective-c nsregularexpression swift

9
推荐指数
1
解决办法
5058
查看次数

使用NSRegularExpression命名捕获组

是否NSRegularExpression支持命名捕获组?它从文档中看起来不像,但我想在探索替代解决方案之前进行检查.

regex cocoa objective-c nsregularexpression

8
推荐指数
2
解决办法
4406
查看次数