【问题标题】:Regular Expression Dynamic Format正则表达式动态格式
【发布时间】:2013-11-11 07:25:09
【问题描述】:

谁能帮我用正则表达式检查刺痛:

我的字符串可以是任何格式让我们看看

12AAA22TBI

上面的 Sting 格式为NNTTTNNTTT

在哪里

N - 数字, T - 文本

我可以编写代码来检查静态格式。但格式会动态变化。

假设第二种情况可能是123456TTT = NNNNNNTTT 格式会有所不同。谁能帮我写一个动态值的正则表达式;

注意:字符串的长度和FORMAT的长度会发生变化。

伪代码:

Function ('FORMAT','STRING'){
IF(FORMAT == STRING): Return 1;
ELSE Return 0;
}

FORMAT == STRING 在这里我需要帮助以使用正则表达式但动态地检查格式和字符串。

示例: 我的功能将相同,但格式和字符串会有所不同:

1. NNNTTTNN -- 111ABC22
2. TNTNTNTN -- A1B2C3D4
3. TTTTNNNNN -- ABCD12345
4. TTNNTTTTTT -- AB01ABCDEF

以上是部分示例。

【问题讨论】:

  • 您是在问“如何将NNTTTNN 转换为正则表达式?”还是别的什么?
  • 是的,但是这里的 NNTTTNN 将是动态的,,,像 TTTTNNNTT 它可能会改变位置,但我们需要检查格式的格式。在字符串中..
  • 请添加一些示例 - 输入和输出
  • 使用 str_replace 将N 转换为\dT 转换为\a\w。将新字符串存储为模式并将其与输入匹配。

标签: php regex string logic expression


【解决方案1】:

使用下面的示例代码作为开始...

$format = 'NNTTTNNTTT';
$value  = '12AAA22TBI';

$format = preg_replace('/[^NT]/', '', $format);
$format = preg_replace('/T/', '[A-Z]', $format);
$format = preg_replace('/N/', '\d', $format);
$format = "/^$format$/";

$match = (preg_match($format, $value));

print "$match\n";

测试它here

【讨论】:

    【解决方案2】:

    我创建了一个生成正则表达式的简单函数,您可以简单地添加规则来支持其他字符并将它们映射到特定的正则表达式:

    function generateRegex($input){
        $rules = array(
            'N' => '[0-9]',
            'T' => '[a-zA-Z]',
            // You could add more rules here
        );
        $delimiter = '~';
    
        $output = strtr($input, $rules); // Replace-Fu
        $output = '^' . $output . '$'; // Add begin and end anchor, comment this line out if you don't want it.
        $output = $delimiter . $output . $delimiter; // Add the delimiters
        return $output; // Should I explain o_O ?
    }
    

    一个演示:

    $inputArr = array('NNNTTTNN','TNTNTNTN','TTTTNNNNN','TTNNTTTTTT');
    foreach($inputArr as $input){
        echo $input . '->' . generateRegex($input) . '<br>';
    }
    

    输出:

    NNNTTTNN -> ~^[0-9][0-9][0-9][a-zA-Z][a-zA-Z][a-zA-Z][0-9][0-9]$~
    TNTNTNTN -> ~^[a-zA-Z][0-9][a-zA-Z][0-9][a-zA-Z][0-9][a-zA-Z][0-9]$~
    TTTTNNNNN -> ~^[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][0-9][0-9][0-9][0-9][0-9]$~
    TTNNTTTTTT -> ~^[a-zA-Z][a-zA-Z][0-9][0-9][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]$~
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-17
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      相关资源
      最近更新 更多