RegEx处理字母数字输入- PHP


RegEx to handle Alphanumeric Input - PHP

我有这个代码。

<?php
    $USClass = "3/312";
    $USClass = preg_replace_callback('~['d.]+/['d.]+~', function ($matches) {
    $parts = explode('/', $matches[0]);
    return $parts[1] . ',' . $parts[0];
    }, $USClass);
    echo $USClass;
?>

输出312,这是我想要的。

然而,如果我给出像D12/336这样的输入,那么它就不起作用了。我想让它打印336,D12

我该怎么做?我当前的代码不处理这个字母数字有什么问题?是因为我用了'd吗?

编辑:

我希望它也能处理这样的输入

148/DIG.111

则输出应为DIG.111,148

'd只包含数字。

您可以尝试'w代替这是字母数字,但另外它还包括_

要使用Unicode,可以输入

~['pL'd.]+/['pL'd.]+~u

'pL是一个Unicode代码点,属性为"Letter"

结尾的u打开使用此功能所需的UTF-8模式

见http://www.php.net/manual/en/regexp.reference.unicode.php

其他解决方案

我觉得你做的有点复杂。如果您使用捕获组,将会更简单。

试试这个:

$in = "148/DIG.111";
preg_match_all('~(['w.]+)/(['w.]+)~', $in, $matches);
echo $matches[2][0] . ',' . $matches[1][0];

解释:

(['w.]+)/(['w.]+)
^^^^^^^^ ^^^^^^^^
Group 1   Group 2

由于括号的缘故,匹配的子字符串存储在数组$matches中。

查看preg_match_all

详细信息

使用一个简单的preg_replace:

$USClass = "148/DIG.111";
$USClass = preg_replace('#(.+?)/(.+)#', "$2,$1", $USClass);
echo $USClass;
输出:

DIG.111,148