如何逐步匹配

时间:2016-07-15 16:00:14

标签: php regex preg-match

我有一个字符串变量,通过连接变得更大。我需要验证每个子串(每次循环迭代)。

我创建了一个模式来匹配字符串的最终有效形式。

如何验证字符串的每个子字符串(部分但顺序正确)?

    $pattern = "#\{/?MYTAG(\d*)?\}#i" 
    $myString = ''

    while (true) {
     $myString .= $aChar;

      // {    => valid
      // {m   => valid
      // {my  => valid
      // {myz => invalid break the loop

      if ( preg_match($pattern, $myString) ) {

       }
    }

我尝试使用?修改后的字符可选。但是它匹配部分字符串:

// {mysdf
// it matches {my
// I want to return false, not get the valid part of the string

我希望这是有道理的。

1 个答案:

答案 0 :(得分:1)

如果你想测试一下你到目前为止的字符串是否有效,但正则表达式只匹配最后一个字符串,那么为什么不添加最终字符串的剩余字符并在每次迭代时测试呢?

如果您拥有的当前字符串是"我的"并且您正在搜索" mytag",然后将" mytag" .substring(2)连接到" my"创建最终字符串。如果正则表达式与连接字符串匹配,那么您知道到目前为止您所拥有的字符串是有效的。

忽略我在那里的特定子串()函数 - 它只是一些伪代码。

这是一个更完整的例子(它没有使用PHP的实际子字符串方法 -​​ 我实际上没有去查找它):

$pattern = "#\{/?MYTAG(\d*)?\}#i";
$myString = '';
$counter = 0;
$finalString = "MYTAG";

while (true) {
 $myString .= $aChar;

  // {    => valid
  // {m   => valid
  // {my  => valid
  // {myz => invalid break the loop

  if ( preg_match($pattern, $myString . $finalString.substring($counter + 1)) ) {

   }
   $counter++;
}

主要的缺点是这只有在你事先知道最后一个字符串的情况下才有效,但看起来你确实如此。但除此之外,这可以作为一个很好的小解决方案。请再次注意我使用的特定子字符串函数是伪代码 - 我实际上并没有查找PHP子字符串函数,但我知道存在一个。

编辑:哎呀,在发布之前我没有看到@ arkascha的评论。不过,这是他们所谈论的一个例子。