我有一个字符串变量,通过连接变得更大。我需要验证每个子串(每次循环迭代)。
我创建了一个模式来匹配字符串的最终有效形式。
如何验证字符串的每个子字符串(部分但顺序正确)?
$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
我希望这是有道理的。
答案 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的评论。不过,这是他们所谈论的一个例子。