正则表达式匹配之间的任何东西

时间:2017-12-23 20:53:44

标签: php regex preg-match

请,我需要一些帮助来创建正确的正则表达式。

我想检测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]);

2 个答案:

答案 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]);