如何使用正则表达式只获取操作数
How to get only operands with regex
我试图只提取操作数即。 + - /
和 *
来自我的算术表达式。
例如:A + B
应该return我+
我尝试使用以下几个正则表达式,但我总是得到一个包含 3 个元素的数组:
表达式 #1:
print_r (var_dump(preg_split ( "/([\w\s]*[^\-\+\/\*])/", "A+B" )), TRUE);
输出:
array(3) {
[0] =>
string(0) ""
[1] =>
string(1) "+"
[2] =>
string(0) ""
}
表达式 #2:
print_r (var_dump(preg_split ( "/(?!\+|\-|\*|\/)[\w\s]+/", "A+B" )), TRUE);
输出:
array(3) {
[0] =>
string(0) ""
[1] =>
string(1) "+"
[2] =>
string(0) ""
}
我只想要一个 +
符号作为输出。
知道我做错了什么吗?
正如 Wiktor 所说,您最好使用 preg_match, but if you really want to use preg_split 使用标志 PREG_SPLIT_NO_EMPTY
并简化您的正则表达式:
print_r (var_dump(preg_split ( "/[\w\s]/", "A+B", -1, PREG_SPLIT_NO_EMPTY )), TRUE);
输出:
array(1) {
[0]=>
string(1) "+"
}
您可以使用 preg_match_all :
preg_match_all ( "/([\^\-\+\/\*])/", "A+B", $result );
$result = $result[0];
print_r($result);
结果是:
Array ( [0] => + )
我试图只提取操作数即。 + - /
和 *
来自我的算术表达式。
例如:A + B
应该return我+
我尝试使用以下几个正则表达式,但我总是得到一个包含 3 个元素的数组:
表达式 #1:
print_r (var_dump(preg_split ( "/([\w\s]*[^\-\+\/\*])/", "A+B" )), TRUE);
输出:
array(3) {
[0] =>
string(0) ""
[1] =>
string(1) "+"
[2] =>
string(0) ""
}
表达式 #2:
print_r (var_dump(preg_split ( "/(?!\+|\-|\*|\/)[\w\s]+/", "A+B" )), TRUE);
输出:
array(3) {
[0] =>
string(0) ""
[1] =>
string(1) "+"
[2] =>
string(0) ""
}
我只想要一个 +
符号作为输出。
知道我做错了什么吗?
正如 Wiktor 所说,您最好使用 preg_match, but if you really want to use preg_split 使用标志 PREG_SPLIT_NO_EMPTY
并简化您的正则表达式:
print_r (var_dump(preg_split ( "/[\w\s]/", "A+B", -1, PREG_SPLIT_NO_EMPTY )), TRUE);
输出:
array(1) {
[0]=>
string(1) "+"
}
您可以使用 preg_match_all :
preg_match_all ( "/([\^\-\+\/\*])/", "A+B", $result );
$result = $result[0];
print_r($result);
结果是:
Array ( [0] => + )