我有以下字符串
3<em>a +</em> 2<em>b</em>
2<em>a </em> - 2<em>b</em>
我希望将它们转换为以下
3 a + 2 b
2 a - 2 b
字符串可能有也可能没有<em></em>
个标签
基本上我需要从动态字符串中解析代数方程。
以下是代码应考虑的一些情况:
2<em>a </em>- (<em>a </em>- 2<em>b)</em>
<em>a </em>- 2<em>b</em>
<em>a </em>+ 2<em>b</em>
3<em>a +</em> 2<em>b</em>
(<em>p</em> + 2)
(<em>p</em> - 3)
<em>not an algebraic equation. tags should not be truncated.</em>
我尝试使用正则表达式来匹配上面的字符串,但可以&#39; nt。
PHP代码:
$string = "3<em>a +</em> 2<em>b</em>";
$pattern = '#(\d{0,9}<em>a.*</em>)#';
preg_match($pattern, $string, $matches);
echo json_encode($matches);
在模式中,我尝试匹配a
内的<em></em>
前面有一个数字。
编辑:我无法使用strip_tags
或相关逻辑截断<em></em>
,因为我的内容是动态的,我只想在匹配为 代数方程式< / EM>
答案 0 :(得分:1)
您可以使用strip_tags
删除 HTML 标记:
$string = "3<em>a +</em> 2<em>b</em>";
echo strip_tags($string);
// second string
$string2 = "2<em>a </em> - 2<em>b</em>";
echo strip_tags($string2);
<强>结果:强>
3a + 2b
2a - 2b
<强>更新强>
如果模式匹配则删除标签:
<?php
$string = "2<em>a </em> - 2<em>b</em>";
$pattern = '#(\d{0,9}<em>a.*</em>)#';
if(preg_match($pattern, $string, $matches)){
echo strip_tags($matches[0]);
}
?>
答案 1 :(得分:1)
var canvas = document.getElementById(canvasId);
canvas.width = width;
canvas.height = height;
答案 2 :(得分:1)
试试这个
<?php
$string = "2<em>an </em> - 2<em>a</em>";
$pattern = '#(\d{0,9}<em>[a-zA-Z].*</em>)#';
if(preg_match($pattern, $string, $matches)){
$a=strip_tags($matches[0]);
echo str_replace(' ','',$a);
}
?>
答案 3 :(得分:1)
你可以试试这个,
<?php $string = "3<em>a +</em> 2<em>b</em>";
$pattern = '/^\d<em>\w\s\S<\/em>\s\d<em>\w<\/em>$/';
preg_match($pattern, $string, $matches);
print_r($matches);
?>
答案 4 :(得分:1)
您可以使用以下方法,请参阅a demo on ideone.com:
<?php
$string = "2<em>a </em>- (<em>a </em>- 2<em>b)</em>
<em>a </em>- 2<em>b</em>
<em>a </em>+ 2<em>b</em>
3<em>a +</em> 2<em>b</em>
(<em>p</em> + 2)
(<em>p</em> - 3)";
$regex = '~(</?[^>]+>| )~';
# looks for html tags (open and closing tags) or literally
$string = preg_replace($regex, "", $string);
echo $string;
// output:
// 2a - (a - 2b)
// a- 2b
// a +2b
// 3a +2b
// (p+ 2)
// (p- 3)
?>
答案 5 :(得分:1)
假设您要提取这些方程式。对我来说,目前还不清楚你的实际目标是什么。
1。)使用[\d)(]*(?:</?em>[^><\r\n]*)+
之类的内容来提取包含<em
...的行
See demo at regex101。这只是为了获取线条。
2。)删除标签和
并检查线条是否看起来像一个等式,例如检查是否至少可以是算术运算符[*/+-]
和数字\d
在它。
if(preg_match_all('~[\d)(]*(?:</?em>[^><\r\n]*)+~', $str, $out))
{
foreach($out[0] AS $v)
{
$v = preg_replace(['~</?em>~', '~ ~'], ["", " "], $v);
if (preg_match('~[*/+-]~', $v) && preg_match('~\d~i', $v))
$eq[] = $v;
}
}
您当然可以更好地改进检查以识别方程式。 See demo at eval.in
答案 6 :(得分:0)
为什么不搜索和替换<em>
和</em>
的所有实例?
$string = "3<em>a +</em> 2<em>b</em>";
$string = str_replace("<em>", "", $string);
$string = str_replace("</em>", "", $string);
echo $string; //3a + 2b
答案 7 :(得分:0)
PHP有一个函数strip_tags
来从字符串中删除HTML标记。你可以使用它。
$string = "3<em>a +</em> 2<em>b</em>";
echo strip_tags($string);
答案 8 :(得分:0)
<GridView ItemsSource="{x:Bind ViewModel.SoundEffects}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:SoundEffectButton">
<Button Style="{StaticResource defaultButton}"
Content="{Binding Name}"
Tag="{Binding FileName}"
Command="{x:Bind Play}"
CommandParameter="{Binding FileName}" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>