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