2009-11-06 47 views
2

我需要一个PHP正则表达式,可以解析.strings文件。特别是,它需要能够处理评论,空白行,转义字符和尖括号。一个.strings文件的正则表达式解析.strings文件

实施例:

/* string one */ 
"StringOne"="\"1\""; 

"StringTwo"="<2>"; 

/* Bob Dillon */ 
"Bob"="Dillon"; 

通过请求,所需的输出将是作为这样的东西:

阵列([StringOne] => “\” 1 \ “”[StringTwo ] => “< 2>”[鲍勃] => “狄龙”)

所有帮助感激!

+0

我不知道你想要什么作为结局 – NDM 2009-11-06 08:16:35

+2

发送-我最codez – Amarghosh 2009-11-06 08:20:59

+0

是一个.strings文件,正常吗?如果不是,你需要一个完整的解析器,而不仅仅是一个正则表达式。 – 2009-11-06 09:52:22

回答

4

呢?

$r = ' 
    /* string one */ 
    "StringOne"="first \"string\""; 

    "StringTwo"="2"; 

    /* Bob Dillon */ 
    "Bob"="Dillon"; 
    '; 

    preg_match_all('~^\s*"((?:\\\\.|[^"])*)"[^"]+"((?:\\\\.|[^"])*)"~m', 
     $r, $matches, PREG_SET_ORDER); 
    $parsed = array(); 
    foreach($matches as $m) 
     $parsed[$m[1]] = $m[2]; 

    print_r($parsed); 

打印

Array ( 
[StringOne] => first "string" 
[StringTwo] => 2 
[Bob] => Dillon 
) 
+0

不能处理括号或转义字符(见更新的问题)。比我得到的更接近! – hammerdr 2009-11-06 08:26:17

+0

对不起,我错过了。它*不处理尖括号,但它不处理转义括号。 – hammerdr 2009-11-06 08:27:34

+0

已更新的问题以提供示例输出。 – hammerdr 2009-11-06 08:33:42

0

虽然我使用PHP脚本,以及,我运行它在Mac上,所以我想我可能会掀起一个可可命令行应用程序做.strings解析无论如何。我做了哪些。

下面的代码是一个命令行实用程序,它使用一个文件名参数(字符串文件)并吐出的字符串文件的内容作为JSON(到stdout)。

#import <Foundation/Foundation.h> 

#import "NSDictionary+BVJSONString.h" // from http://stackoverflow.com/a/20262259/129202 

#define ERRORCODE (1) 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 

     // insert code here... 
     //NSLog(@"Hello, World!, argc: %d", argc); 

     if (argc != 2) { 
      NSLog(@"Specify file argument!"); 
      return ERRORCODE; 
     } 

     NSString* filepath = [NSString stringWithCString:argv[1] encoding:NSASCIIStringEncoding]; 

     NSError* error = nil; 

     NSStringEncoding usedencoding; 
     NSString* strings = [NSString stringWithContentsOfFile:filepath usedEncoding:&usedencoding error:&error]; 
     if (error) { 
      NSLog(@"Error: %@", error); 
      return ERRORCODE; 
     } 
     NSDictionary* dict = [strings propertyList]; 
     NSString* json = [dict bv_jsonStringWithPrettyPrint:NO]; 

     [json writeToFile:@"/dev/stdout" atomically:NO encoding:NSUTF8StringEncoding error:nil]; 
    } 
    return 0; 
} 

这有点粗糙 - 它最好从标准输入或其他东西读取 - 我不太习惯写这些东西,所以随意改善。请注意,这是使用Apple自己的.strings解析代码,所以应该比大多数正则表达式更好。