I have variables $e
and $x
:
$e="<a class="ui small interactive circular label" style="background-color:#4bbedd;vertical-align:middle;" data-reactid=".0.1.1.1.3.0.0.1.1.1.1.0.$Aquatic Blue">"
$x="<a class="ui small interactive circular label" style="background-color:#F27EB2;vertical-align:middle;" data-reactid=".0.1.1.1.3.0.0.1.1.1.1.0.$Azalea">"
I need the string #4bbedd
, not searching by "#4bbedd"
in $e
and #F27EB2
in $x
.
Step by step: First I need to get string before the ;vertical
word and that string is "<a class="ui small interactive circular label" style="background-color:#4bbedd"
Then I need to get string after the color:
word and I got my value only using PHP function and only in one line of code to get from both variables
I need to change only the variable name that contain string like $e
then $x
, the line logic should be like this:
$var = $e.functionForFindStringBeforThisWord(";vertical").functionForFindStringAfterThisWord("color:")
or is there another way that has only one line code?
答案 0 :(得分:0)
你期待这个吗?
string array1 = "zl svefg gbby pelcgb";
int t2 = 0;
foreach (char c in array1)
{
if ((int)c == 32 || ((int)c >= 48 && (int)c <= 57))
t2 = c;
else
t2 = ((((int)c - 97) - 13) % 26) + 97;
Console.Write((char)t2);
}
答案 1 :(得分:0)
最可靠,最直接的方法是使用preg_match()
模式专门针对background-color:
后面的值。
通过这样做,即使css属性的顺序不同,您仍将获得所需的子字符串。 Sahil的方法假设你想要第一个css属性的值 - 如果background-color
不存在或者不是第一个css属性,这将产生不正确的结果。
这是一个简单的模式:/background-color:\K[^;]+/
这表示查找子字符串background-color:
,然后\K
说“从这一点开始匹配”。 [^;]+
表示匹配一个或多个不是分号的字符 - 这使得匹配在分号之前结束。
为了提高可靠性,您可以在样式属性中包含background-color:
的检查:
/style="[^"]*background-color:\K[^;]+/
代码:(Demo)
$strings=['<a class="ui small interactive circular label" style="background-color:#4bbedd;vertical-align:middle;" data-reactid=".0.1.1.1.3.0.0.1.1.1.1.0.$Aquatic Blue">',
'<a class="ui small interactive circular label" style="vertical-align:middle;background-color:#F27EB2;" data-reactid=".0.1.1.1.3.0.0.1.1.1.1.0.$Azalea">'
];
foreach($strings as $string){
echo (preg_match('/style="[^"]*background-color:\K[^;]+/',$string,$out)?$out[0]:'failed'),"\n";
}
输出:
#4bbedd
#F27EB2
现在,即使这样也容易受到误报匹配的影响(但老实说,你必须刻意去做才能让它失败)。
StackOverflow的默认建议是,每当您尝试从html字符串中解析/提取值时,都应该使用DOM解析器。如果你非常担心误报匹配而不担心处理速度,你可以走那条路。
如果您希望看到另一种非正则表达式方法,这将比Sahil的非正则表达式方法更可靠:
代码:(Demo)
$strings=['<a class="ui small interactive circular label" style="background-color:#4bbedd;vertical-align:middle;" data-reactid=".0.1.1.1.3.0.0.1.1.1.1.0.$Aquatic Blue">',
'<a class="ui small interactive circular label" style="vertical-align:middle;background-color:#F27EB2;" data-reactid=".0.1.1.1.3.0.0.1.1.1.1.0.$Azalea">'
];
foreach($strings as $string){
// trim away all text before "background-color:", then extract the value knowing its exact position
echo substr(strstr($string,'background-color:'),17,7),"\n";
}
输出:
#4bbedd
#F27EB2