在正则表达式中添加排除项

时间:2013-01-04 22:39:51

标签: php regex

我目前有以下正则表达式来解析数据。还有一系列“排除”

$userNameArray = (userName1, user Name2, User Name 3);

$re = '/^(?<timeMined>[0-9]{2}:[0-9]{2}:[0-9]{2}) # timeMined 
     \s+
     (?<userName>[\w\s]+)        # user name
     \s+(?:has\s+looted)\s+    # garbage text between name and amount
     (?<amount>\d+)              # amount
     \s+x\s+                     # multiplication symbol
     (?<item>.*?)\s*$            # item name (to end of line)
   /xmu';
preg_match_all($re, $sample, $matches, PREG_SET_ORDER);
foreach ($matches as $value){
    code
}

我的代码目前有if语句,如果$value['userName']$userNameArray中执行代码的一部分,如果没有,则执行不同的部分。但是,如果我可以在正则表达式中解析坏用户,这将会更加容易。

1 个答案:

答案 0 :(得分:2)

虽然您可以使用

中的negative lookahead
$re = '/^(?<timeMined>[0-9]{2}:[0-9]{2}:[0-9]{2}) # timeMined 
     \s+
     (?!user1|user2|user3)       # exclude users <--
     (?<userName>[\w\s]+)        # user name
     \s+(?:has\s+looted)\s+    # garbage text between name and amount
     (?<amount>\d+)              # amount
     \s+x\s+                     # multiplication symbol
     (?<item>.*?)\s*$            # item name (to end of line)
   /xmu';

将重要的应用程序逻辑编码为正则表达式。最有可能的是,您当前的解决方案更容易理解,更易读,更容易更改。