我目前有以下正则表达式来解析数据。还有一系列“排除”
$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
中执行代码的一部分,如果没有,则执行不同的部分。但是,如果我可以在正则表达式中解析坏用户,这将会更加容易。
答案 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';
将重要的应用程序逻辑编码为正则表达式。最有可能的是,您当前的解决方案更容易理解,更易读,更容易更改。