正则表达式转换问题

时间:2013-12-29 04:47:16

标签: php regex

我有一个正则表达式来搜索日志。但是,它适用于搜索,但不适用于PHP。我对正则表达式不好,并且不知道它有什么问题。

他们的正则表达式"\\] ([a-zA-Z _]+) \\(.*to ([a-zA-Z _]+) \\(.*\\$([0-9,]+)"

Warning: preg_match_all() [function.preg-match-all]: Delimiter must not be alphanumeric or backslash

我需要帮助才能在PHP中使用它。

日志的一个例子是:

[2013/12/28 - 15:16:22] Zack Willson (IP: 127.0.0.1) has sold their house (ID 4681) to William Hill (IP: 127.0.0.1) for $13,700,000.

我需要获得第一个球员的名字,第二个球员的名字以及花费的金额。如果该正则表达式不易转换或任何问题可能。

1 个答案:

答案 0 :(得分:1)

这个正则表达式怎么样:

\]\s+([a-zA-Z\s_]+)\s+\(.*\)\s+to\s+([a-zA-Z\s_]+)\s+.*\)\s+for\s+(\$[0-9,\s_]+)\s?+

在PHP中它将是:

// Test data from the log.
$log_data = "[2013/12/28 - 15:16:22] Zack Willson (IP: 127.0.0.1) has sold their house (ID 4681) to William Hill (IP: 127.0.0.1) for $13,700,000.";

// The 'preg_match' statement.
preg_match('/\]\s+([a-zA-Z\s_]+)\s+\(.*\)\s+to\s+([a-zA-Z\s_]+)\s+.*\)\s+for\s+(\$[0-9,\s_]+)\s?+/is', $log_data, $matches);

// Output the '$matches'
echo '<pre>';
print_r($matches);
echo '</pre>';

结果将是:

Array
(
    [0] => ] Zack Willson (IP: 127.0.0.1) has sold their house (ID 4681) to William Hill (IP: 127.0.0.1) for $13,700,000
    [1] => Zack Willson
    [2] => William Hill
    [3] => $13,700,000
)