为什么NaN值的比较与所有其他值的行为不同?也就是说,与运算符==,<=,> =,<,>的所有比较(其中一个或两个值为NaN)返回false,这与所有其他值的行为相反.
我想这可以通过某种方式简化数值计算,但我找不到明确说明的理由,甚至在Kahan 的IEEE 754状态讲义中也没有详细讨论其他设计决策.
这种异常行为在进行简单数据处理时会造成麻烦.例如,当在C程序中对某些实值字段的记录列表进行排序时,我需要编写额外的代码来处理NaN作为最大元素,否则排序算法可能会变得混乱.
编辑: 迄今为止的答案都认为比较NaNs毫无意义.
我同意,但这并不意味着正确的答案是错误的,而是一个非布尔值(NaB),幸运的是它不存在.
因此,在我看来,选择返回真或假的比较是任意的,对于一般数据处理,如果它遵循通常的定律(==的反射性,<= =,>的三分法),那将是有利的,以免数据结构依赖这些法律变得困惑.
因此,我要求打破这些法律的一些具体优势,而不仅仅是哲学推理.
编辑2: 我想我现在理解为什么使NaN最大化是一个坏主意,它会搞砸上限的计算.
可能需要NaN!= NaN以避免检测环路中的收敛,例如
while (x != oldX) {
oldX = x;
x = better_approximation(x);
}
Run Code Online (Sandbox Code Playgroud)
然而,最好通过比较绝对差异与小限制来编写.所以恕我直言,这是打破NaN反身性的一个相对弱的论据.
我不断遇到需要从字符串中捕获大量令牌的情况,经过无数次的尝试后,我找不到简化过程的方法.
所以我们说文本是:
启动:测试 - 测试 - LOREM-存有-SIR-doloret - 等 - 等 - 的东西:结束
这个例子里面有8个项目,但是说它可能有3到10个项目.
我理想上喜欢这样的东西:
start:(?:(\w+)-?){3,10}:end
漂亮而干净但是它只能抓住最后一场比赛.看这里
我通常在简单的情况下使用这样的东西:
start:(\w+)-(\w+)-(\w+)-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?:end
Run Code Online (Sandbox Code Playgroud)
由于最大10限制,3组强制要求和另外7组可选,但这看起来并不"好",如果最大限制为100且匹配更复杂,编写和跟踪将是一件痛苦的事.演示
到目前为止我能做的最好:
start:(\w+)-((?1))-((?1))-?((?1))?-?((?1))?-?((?1))?-?((?1))?-?((?1))?:end
Run Code Online (Sandbox Code Playgroud)
特别是如果比赛很复杂但仍然很长.演示
有人设法让它作为一个没有编程的1正则表达式解决方案工作?
我最感兴趣的是如何在PCRE中完成,但其他口味也可以.
目的是match 0
通过RegEx单独验证匹配并捕获单个令牌,而不受任何OS /软件/编程语言限制
在@nhahtdh的帮助下,我使用以下方法访问下面的RegExp \G
:
(?:start:(?=(?:[\w]+(?:-|(?=:end))){3,10}:end)|(?!^)\G-)([\w]+)
Run Code Online (Sandbox Code Playgroud)
演示甚至更短,但无需重复代码即可进行描述
我也对ECMA的味道感兴趣,因为它不支持\G
想知道是否有另一种方式,特别是不使用/g
修饰符.
我试图将PHP变量作为PHP变量包含在PHP代码中,但我遇到了这样的问题.单击按钮时,将调用以下函数:
<script type="text/javascript">
function addTraining(leve, name, date)
{
var level_var = document.getElementById(leve);
var training_name_var = document.getElementById(name);
var training_date_var = document.getElementById(date);
<?php
$result = "INSERT INTO training(level, school_name, training_date) VALUES('level_var', 'training_name_var', 'training_date_var')" or die("Query not possible.");
?>
</script>
Run Code Online (Sandbox Code Playgroud)
可能吗?
我有一些像这样的字符串
string phoneNumber = "(914) 395-1430";
Run Code Online (Sandbox Code Playgroud)
我想剥去parethenses和破折号,换句话说就是保留数值.
所以输出看起来像这样
9143951430
Run Code Online (Sandbox Code Playgroud)
如何获得所需的输出?
我有一个文件,每行Mar 15, 2013
以及其他日期结束,所以我需要删除每行的结尾说最后13个字符
每一行都有不同的长度,并且具有不同的字符,因此无法使用任何字符作为分隔符.
假设我有这些字段的集合:
{
"category" : "ONE",
"data": [
{
"regex": "/^[0-9]{2}$/",
"type" : "TYPE1"
},
{
"regex": "/^[a-z]{3}$/",
"type" : "TYPE2"
}
// etc
]
}
Run Code Online (Sandbox Code Playgroud)
所以我的输入是"abc"所以我想获得相应的类型(或最佳匹配,尽管最初我假设RegExes是独占的).有没有可能通过良好的性能实现这一目标?(这将排除迭代RegEx数组的每个项目)
请注意,如果可能,可以重新安排架构,因为该项目仍处于设计阶段.所以替代方案将受到欢迎.
每个类别可以有大约100 - 150个RegExes.我打算有大约300个类别.但我知道这些类型是相互排斥的.
一个类别的真实世界示例:
type1=^34[0-9]{4}$,
type2=^54[0-9]{4}$,
type3=^39[0-9]{4}$,
type4=^1[5-9]{2}$,
type5=^2[4-9]{2,3}$
Run Code Online (Sandbox Code Playgroud) 我想写一个正则表达式的二进制数可被5整除.
我已经完成了二进制数的正则表达式,可以被2和3整除,但我找不到一个5.
有什么建议?
我正在从以下字符生成一个6位数的代码.这些将用于在贴纸上盖章.
它们将分批生成10k或更少(打印前),我不认为总计将超过1-2百万(可能更少).
生成批量代码后,我将检查现有代码的MySQL数据库,以确保没有重复.
// exclude problem chars: B8G6I1l0OQDS5Z2
$characters = 'ACEFHJKMNPRTUVWXY4937';
$string = '';
for ($i = 0; $i < 6; $i++) {
$string .= $characters[rand(0, strlen($characters) - 1)];
}
return $string;
Run Code Online (Sandbox Code Playgroud)
我有一个字符串描述像这样的nxm元素矩阵:
§inputmap = "
~~~~~~~~~~~~~~~~~~~~B~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~BBB........BBB~~~~~~~~~~~~~
~~~~~~~~~~BB...............FBB~~~~~~~~~~
~~~~~~~~BB....................BB~~~~~~~~
~~~~~~BB.....F..................BB~~~~~~
~~~~~BB.....................F.....B~~~~~
~~~~B..............................B~~~~
~~~B........F.......................B~~~
~~BB.........F......................BB~~
~~B................F.................BB~
~BF....F....F........................FB~
~B.....................................B
B.....................................FB
B........F......F......................B
B...........................F..........B
B......................................B
B......................................B
B.......F.......................F......B
B......FFF.............................B
B.......F.............................FB
~B..................F.................FB
~BF...........................F.......B~
~~B...F...........F..........FFFFF.F.BB~
~~BB..................F..F....F.....BB~~
~~~B.......................FF.FF....B~~~
~~~~B..............................B~~~~
~~~~~BB...........................B~~~~~
~~~~~~BB........................BB~~~~~~
~~~~~~~~BB..........F..........B~~~~~~~~
~~~~~~~~~~BB................BB~~~~~~~~~~
~~~~~~~~~~~~~BBB.......F.BBB~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~BBBBBB~~~~~~~~~~~~~~~~~
";
$inputmap = trim($inputmap);
Run Code Online (Sandbox Code Playgroud)
我需要构建一个正则表达式(或其他东西)来搜索字符串:
$search = "
*F*
FFF
*F*
";
$search = trim($search);
Run Code Online (Sandbox Code Playgroud)
在整个网格上.另一方面,我需要找到一个5个不同字母"F"的图案(垂直3个,水平3个),回到地图上找到的图案的行/列位置.
考虑到输入矩阵可以是不同的(5x5或10x10或20x25或......),有没有办法解决我的PHP和正则表达式的问题?
我是regex的新手,需要从我们的网址中删除一些内容
http://mysite.blah/problem/smtp/smtp-open-relay?page=prob_detail&showlogin=1&action=smtp:134.184.90.18
Run Code Online (Sandbox Code Playgroud)
我需要删除"?"中的所有内容 然后,离开我:
http://mysite.blah/problem/smtp/smtp-open-relay
Run Code Online (Sandbox Code Playgroud)
这是我们用于获取路径数据的当前正则表达式.例如,我可以抓住"smtp"和"smtp-open-relay"(我们需要).但是,有时我们的url会根据用户的来源而改变,从而附加查询字符串参数,这会导致我们当前的正则表达式爆炸.
// Retrieve the route data from the route
var routeData = /([0-9a-zA-Z_.-]+)\/([0-9a-zA-Z_.-]+)$/g.exec(route);
Run Code Online (Sandbox Code Playgroud)
我需要它来忽略"?"中的内容.上.
regex ×7
php ×3
javascript ×2
algorithm ×1
binary ×1
c# ×1
comparison ×1
division ×1
iec10967 ×1
ieee-754 ×1
jquery ×1
mongodb ×1
nan ×1
notepad++ ×1
numeric ×1
performance ×1
permutation ×1
random ×1
string ×1