php - 在字符串

时间:2016-10-04 08:55:19

标签: php string

我试图找出如何在字符串中找到匹配项。 我正在寻找以下任何- = ? [] ~ # ! 0 - 9 A-Z a-z的匹配项,我需要知道它匹配的内容。

例如:匹配!,或匹配=#以及?

通常我会用这个:

$a = 'How are you?';

if (strpos($a, 'are') !== false) {
    echo 'true';
}

但是我不知道该怎么做才能查找所需的字符。 我也可以[][][xxxx],其中xxxx可以是任意数量的字母数字字符。

我需要匹配列出的任何字符,返回字符,以便我知道匹配的内容以及[]是否包含任何值返回。

例如:

$a = 'DeviceLocation[West12]'; 将返回:$match = '[]'; $match_val= 'West12';

$a = '#=Device'; 将返回:$match = '#,=';

$a= '?[1234]=#Martin'; 将返回:$match = '?, [], =, #'; $match_val= '1234';

任何人都可以建议我如何做到这一点。 感谢

4 个答案:

答案 0 :(得分:1)

请使用正则表达式,例如使用preg_match

答案 1 :(得分:1)

试试这个

它将匹配preg_match_all("/\[([^\]]*)\]/", $text, $matches);

中的字符串
?

这将匹配#=preg_match_all("/^#=(\S+)|\?(.*)/", $text, $matches); var_dump($matches);

之后的字符串
{{1}}

答案 2 :(得分:1)

嗯,这些要求有点模糊,但这是我推断的:

1)如果方括号内有字母数字字符串,则将其作为单独的值
 2)所有其他提到的字符应逐一匹配,然后implode d。

您可以使用以下正则表达式获取所需的值:

$re = '@\[([a-zA-Z0-9]+)\]|[][=?~#!]@';

详细

  • \[ - [
  • ([a-zA-Z0-9]+) - 第1组值捕获1个或多个字母数字符号
  • \] - 结束]
  • | - 或
  • [][=?~#!] - 单个字符,集合中定义的字符之一。

请参阅regex demo。这里最重要的是获得匹配的代码(随意适应):

$re = '@\[([a-zA-Z0-9]+)\]|[][=?~#!]@';
$strs =array('DeviceLocation[West12]', '#=Device', '?[1234]=#Martin');

foreach ($strs as $str) {
    preg_match_all($re, $str, $matches, PREG_SET_ORDER);
    $results = array();
    $match_val = "";
    foreach ($matches as $m) {
        if (!empty($m[1])) {
            $match_val = trim($m[1], "[]");
            array_push($results, "[]");
        } else {
            array_push($results, $m[0]);
        } 
    }
    echo "Value: " . $match_val . "\n";
    echo "Symbols: " . implode(", ", $results);
    echo "\n-----\n";
}

请参阅PHP demo

输出:

Value: West12
Symbols: []
-----
Value: 
Symbols: #, =
-----
Value: 1234
Symbols: ?, [], =, #
-----

答案 3 :(得分:0)

您需要regular expressions来检查另一个具有不同属性的文本,这是一个关于该链接的简单教程。