我想通过正则表达式验证我的中缀表示法。现在我有这样的事情:
^[a-zA-Z0-9_]+(( [a-zA-Z0-9_]+)|( [\+\-\/\*]))*( [a-zA-Z0-9_]+)$
我检查expresion是否以操作数开始和结束。在中间,我可以让操作数或运算符始终由单个空格分隔。可能只有一个运算符,操作数可以有多个字符。现在一切似乎都还可以。但我还想检查操作数是否总是由运算符分隔,我不知道如何实现。有人可以给我一些建议吗?
答案 0 :(得分:0)
您可以使用以下修复:
^[a-zA-Z0-9_]+(?: *[+\/*-] *[a-zA-Z0-9_]+)*$
请参阅regex demo。
请注意,根据正则表达式库,您可能使用\w
而不是[a-zA-Z0-9_]
,而不是使用\w
,因为在.NET或Python中,^
默认情况下是Unicode。< / p>
模式详情
[a-zA-Z0-9_]+
- 字符串开头_
- 一个或多个ASCII字母,数字或(?: *[+\/*-] *[a-zA-Z0-9_]+)*
*[+/*-] *
- 零个或多个序列:
[a-zA-Z0-9_]+
- 零个或多个空格,一个运算符,0 +空格,_
- 一个或多个ASCII字母,数字或$
/
- 字符串结束。请注意,如果您的正则表达式风格不使用正则表达式分隔符,则无法转义\s
。要匹配任何空格,请将模式中的常规空间替换为(?:...)
。
(?:abc|xyz)
构造是non-capturing group。它意味着分组模式,可以是替代(如<?php
$query_brands = mysql_query("SELECT distinct pd_filter1 from tbl_brands2 WHERE pd_code in (select pd_code from tbl_product where cat_id='2')") or die(mysql_error());
$count_brands = mysql_num_rows($query_brands);
if($count_brands > 0) {
while($fetch_brands = mysql_fetch_array($query_brands)) {
$record_brands[] = $fetch_brands;
}
}
$i_brands=0;
foreach($record_brands as $records_brands) {
?>
<table border="1" width="215" style="border-collapse: collapse; border-spacing: 0;" bgcolor="#eeeff0">
<tr>
<td>
<?php
$i_brands = $i_brands + 1;
if ($i_brands > 3)
{
?>
<div id="myDIV_Filter1_1" style="display:none";>
<?php
}
}
?>
<div id="myDIV_Filter1_2">
<span class="class22">
<a href="#" onclick="myFunction();return false;">show more...</a>
</span>
</div>
<div id="myDIV_Filter1_3" style="display:none";>
<span class="class22">
<a href="#" onclick="myFunction();return false;">show less...</a>
</span>
</div>
</td>
</tr>
</table>
)或量化(如此处),或两者兼而有之。它匹配的值不存储在任何地方,找不到匹配后就无法访问它(与捕获组不同)。