Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在两个角色之间获取所有内容_Php_Regex - Fatal编程技术网

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

Php 在两个角色之间获取所有内容,php,regex,Php,Regex,我正在使用PHP。我试图获得一个正则表达式模式,以匹配value=“和”之间的所有内容,即第1行第2行,…,到第4行 value="Line 1 Line 2 Line 3 Line 4" 我试过/.*?/,但似乎不起作用 我非常感谢你的帮助 谢谢 另外,我想补充一点,作为对一些评论的回应,第一个“和最后一个”之间的所有字符串都是可以接受的。我只是想找到一种方法,在第一个“和最后一个”之间找到所有东西,即使中间有一个。我希望这是有意义的。谢谢。我不是一个regex大师,但为什么不把它分解呢 /

我正在使用PHP。我试图获得一个正则表达式模式,以匹配value=“和”之间的所有内容,即第1行第2行,…,到第4行

value="Line 1
Line 2
Line 3
Line 4"
我试过
/.*?/
,但似乎不起作用

我非常感谢你的帮助

谢谢


另外,我想补充一点,作为对一些评论的回应,第一个“和最后一个”之间的所有字符串都是可以接受的。我只是想找到一种方法,在第一个“和最后一个”之间找到所有东西,即使中间有一个。我希望这是有意义的。谢谢。

我不是一个
regex
大师,但为什么不把它分解呢

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

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

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

/.*?/
的作用是不匹配新行字符。如果要匹配新行字符,则需要使用类似于
/([^“]*)/
的正则表达式


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

如果必须使用regex:

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

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


您需要
s
图案修改器。类似于:
/value=“(.*)”/s

规范不清楚,但您可以尝试以下方法:

/value="[^"]*"/
说明:
  • 首先,
    value=“
    按字面匹配
  • 然后,匹配
    [^”]*
    ,即除
    之外的任何内容,可能跨越多行
  • 最后,逐字匹配
这不允许
出现在“real”引号之间,即使它是通过前面加反斜杠等方式转义的

[…]
是一个字符类。类似于
[aeiou]
的内容匹配任何一个小写元音。
[^…]
是一个否定字符类。
[^aeiou]
匹配除小写元音以外的任何一个元音

工具书类
    • 在不同的字符串模式上有变化(例如允许转义引号)
相关问题
    • 实际上,否定字符类总是比
      *?

我可能会爆炸,但如果出现“在value=”和“范围内”,我仍然会有问题。不确定是否有一个正则表达式可以容纳这种可能性。如果字符串中有一个
,那么您需要更精确地确定哪些字符串是可以接受的;例如,字符串分隔符后面必须跟一个新行字符。@Chuck:然后规定最后一个
必须在,
“\n
。在一个字符串
v1=“value1”,v2=“value2”
中,该字符串将匹配
“value1”,v2=“value2”
@Null:OP添加了一条注释,说明这正是他想要的。看起来这就是他想要的答案。你不需要一个捕获小组吗?非常感谢。是否可以允许“在实际引号之间,即在第一个引号和最后一个引号之间匹配所有内容”,当然仍然跨越多行?
“*”
在单线模式下(
/s
标志)可以这样做;看看shadowfax的答案。不过,我不确定这是否真的是你想要的。如果规范真的那么简单,你也可以使用
indexOf/lastinexof
而不是regex。嗨,谢尔盖。谢谢,这很有效。有没有办法只匹配第一个引号和最后一个引号?例如,如果我有“第1行第2行第3行第4行,我可以修改你的正则表达式,使所有内容都包含在第一个“和最后一个”中,包括“出现在之间的”吗?
/value="[^"]*"/