请,我需要一些帮助来创建正确的正则表达式。
我想检测Decode("
")
之间的任何内容,以便为我提供此输出2%65%66%_WHATEVER_8%74%74
我尝试了很多,但没有任何方法可以正确地为我提供我想要的确切输出。
我的代码:
$string = '
<td class="red"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td>
<td class="green"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td>
<td class="red"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td>
';
$pattern = '/Decode("([^*]+)")/i';
preg_match_all($pattern, $string, $matches);
print_r($matches[1]);
答案 0 :(得分:1)
如评论中所述,您可以使用
Decode\("([^"]+)"\)
然后选择第一组,请参阅a demo on regex101.com。
<小时/> 作为PHP
演示:
<?php
$data = <<<DATA
<script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script>
DATA;
$regex = '~Decode\("([^"]+)"\)~';
if (preg_match_all($regex, $data, $matches)) {
print_r($matches[1]);
}
?>
答案 1 :(得分:1)
根据您的输入字符串,您只需要以下模式:
$ ./bin/matrixscanf
Enter number of rows: 3
Enter number of columns: 3
Enter matrix elements
matrix[0][0]: 1
matrix[0][1]: 2
matrix[0][2]: 3
matrix[1][0]: 4
matrix[1][1]: 5
matrix[1][2]: 6
matrix[2][0]: 7
matrix[2][1]: 8
matrix[2][2]: 9
This is your matrix:
1 2 3
4 5 6
7 8 9
此简短模式是恰当/准确的,因为您的目标双引号子字符串由前面的/\("\K[^"]+/
唯一标识。
(
将在全字符串匹配(preg_match_all()
)中提供所需的子字符串。与使用捕获组相比,输出数组更快,更少膨胀。
[0]
表示&#34;字面开括号&#34;。如果没有反斜杠,正则表达式会误解你的意思,并认为\(
意味着:&#34;从这一点开始捕捉&#34;。
(
将重新启动全字符串匹配。
\K
会贪婪地匹配一个或多个非双引号字符,并在遇到双引号之前停止。这是[^"]+
。这些通常用于提高效率,同时保持准确性。
代码:(演示:https://3v4l.org/UmaaC)
negated character class
输出:
$string = '
<td class="red"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td>
<td class="green"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td>
<td class="red"><script type="text/javascript">Decode("2%65%66%_WHATEVER_8%74%74")</script></td>';
$pattern = '/\("\K[^"]+/';
preg_match_all($pattern, $string, $matches);
print_r($matches[0]);