我有多个换行符的字符串,每个新行都包含一个新的子字符串。
以下是包含2行的字符串示例:
$x="Hello
World!
您可以看到 Hello 位于第一行, World!位于换行符中。
每个子串在有或没有换行符的情况下开始和结束。
我想匹配两条线。
我的currunt代码匹配第二行并忽略了第一行。
if(preg_match_all("/^\n*\s*(Hello|World!)\s*$/i",$x,$m))
{print_r($m);}
有没有办法解决这个问题,以便两条线都匹配?
答案 0 :(得分:1)
if(preg_match_all("/(Hello|World!)/i",$x,$m))
{
print_r($m);
}
如果您使用^ $,则仅匹配整行。 所以Hello部分在Hello之前没有\ n * \ s *,所以它不会匹配。 如果您更改上面的脚本,它只会查找单词,不管在单词之前或之后有任何内容。
希望有所帮助。
答案 1 :(得分:1)
试试这个
auto pos = stng.find("1"); // search for 1 in the string
if (pos!=stng.npos) // check if 1 is found
{
stng.replace(pos, 1, ":x:"); // replace ":x:" starting from 'pos' to 'pos+1'
}
<强>输出强>
$x="Hello
world! ";
preg_match_all("#\b(Hello|World!)\b#",$x,$m) ;
echo count($m)
答案 2 :(得分:1)
我不确定&#34;目标&#34;但这个正则表达式将匹配两条线。我将Hello | World更改为(。+?),因为它匹配任何字符,因此如果要解析代码,则会匹配变量。
/^(.+?)[\n,\s,\t]{1,8}(.+?)$/
以下是您使用新正则表达式的示例,因此,如果我误解了您可以看到正在发生的事情。
<?php
$x="Hello
World!";
if(preg_match_all("/^(.+?)[\n,\s,\t]{1,8}(.+?)$/i",$x,$m))
{print_r($m);}
?>
如果解析多个系列,你需要确定第一行和第二行之间的潜在字符数和数量,然后修改{1,8}以适应空格,制表符,换行符,等...