2014-01-05 52 views
1

我是新的这些部分,我通常可以找到任何问题的答案,我使用谷歌,但不幸的是我很难过。变量与PHP正则表达式

我想在我经常访问的网站上完成编程任务。从本质上讲,我必须做的是获取一列混杂的单词,将它们与未加密的单词列表进行比较,然后将我的单词发回网页。对于一个非常简单的例子,我想有这样的单词列表:

linux 
windows 
mac 

这些炒的话:

ilxun 
cma 

所以我需要张贴“在Linux,Mac”。简单。但是,我在使用正则表达式时遇到了麻烦。我写了这个简化的测试代码,试图得到一个工作正则表达式:

<?php 
$subject = 'linux'; 
$pattern = 'nulix'; 
$length = strlen($subject); 

if (preg_match("([$pattern]{"$length"})",$subject)) { 
    echo True; 
} 
?> 

我的问题是让长度变量工作。我在this site上找到了所有不同的变体。我试过将双引号改为单引号,我试过外引号和单引号,反之亦然。我不确定该怎么做。如果我改变了正则表达式:

if (preg_match("([$pattern]{5})",$subject)) 

它回声1完全一样我想它,所以我知道,正则表达式是正确的,我只是不知道如何使它使用$长度是可变的。任何意见,将不胜感激。

回答

1

你想要的是:

if (preg_match("([$pattern]{{$length}})",$subject)) { 

{$length}得到由编号替代,所以你需要一个第二组的{}为了保持波浪形支架所产生的字符串中。

还要注意的是,如果你并不需要的支架,你可以写

"The length is $length" 

,走出

"The length is 5" 
+0

甜,感谢队友!你是什​​么意思,它不会解决我想要做的事情?当与嵌套的foreach循环结合使用时,它应该可以工作,对吧? – dboxall123

+0

我把那部分拿回来了,@ dboxall123 - 对不起! 'mac'和'cam'都会匹配争夺'mca'。在这种情况下,没关系。而且你限制的东西的长度,所以你不会意外地匹配'macc'。 – Richard

+0

如果此答案对您有帮助,请随时按下向上的箭头,或点击旁边的大复选标记,如果这是您问题的最佳答案。 – Richard