获取两个角色之间的所有内容

时间:2010-08-07 05:19:16

标签: php regex

我正在使用PHP。我正在尝试使用正则表达式模式来匹配value =“和”之间的所有内容,即第1行第2行,......,第4行。

value="Line 1
Line 2
Line 3
Line 4"

我已经尝试了/.*?/,但它似乎无效。

我很感激一些帮助。

感谢。

P.S。我想补充一下,回应一些评论,第一个“和最后一个”之间的所有字符串都是可以接受的。我只是试图找到一种方法来获得介于第一个“和最后一个”之间的所有内容,即使存在“介于两者之间。我希望这是有道理的。谢谢。

7 个答案:

答案 0 :(得分:4)

假设所需的字符是“双引号”:

$pat = '/\"([^\"]*?)\"/'; // text between quotes excluding quotes
$value='"Line 1 Line 2 Line 3 Line 4"';

preg_match($pat, $value, $matches);

echo $matches[1]; // $matches[0] is string with the outer quotes

答案 1 :(得分:1)

如果你只是想要回答而不想要特定的正则表达式,那么你可以使用它:

    <?php
$str='value="Line 1
Line 2
Line 3
Line 4"';
$need=explode("\"",$str);
var_dump($need[1]);
?>

答案 2 :(得分:1)

/.*?/具有与新行字符不匹配的效果。如果您也想匹配它们,则需要使用正则表达式,如/([^"]*)/

我同意Josh K的观点,在这种情况下不需要正则表达式(特别是如果你知道除了用于分隔字符串的那个之外没有任何顶点)。你也可以采用他给出的解决方案。

答案 3 :(得分:1)

如果必须使用正则表达式:

if (preg_match('!"([^"]+)"!', $value, $m))
    echo $m[1];

答案 4 :(得分:1)

您需要s模式修饰符。类似于:/value="(.*)"/s

答案 5 :(得分:0)

我不是regex大师,但为什么不爆炸呢?

// Say $var contains this value="..." string
$arr = explode('value="');
$mid = explode('"', $arr[1]);
$fin = $mid[0]; // Contains what you're looking for.

答案 6 :(得分:0)

规范不明确,但您可以尝试这样的事情:

/value="[^"]*"/

说明:

  • 首先,value="按字面意思匹配
  • 然后,匹配[^"]*,即"以外的任何内容,可能跨越多行
  • 最后,按字面意思匹配"

这不允许"出现在“真实”引号之间,即使它被例如前面加一个反斜杠。

[…]字符类。像[aeiou]这样的东西匹配任何一个小写元音。 [^…]否定的字符类。 [^aeiou]除了小写元音之外的任何内容匹配。

参考

相关问题