我需要一个正则表达式来检查textarea表单的输入并检测表单是否包含超过999个单词。这与语言无关,即我使用的表单插件接受正则表达式进行验证。
答案 0 :(得分:1)
您只需要针对输入字符串测试简单的正则表达式匹配。使用正则表达式
(?:\b\w+(?:\W+|$)){1000}
如果您需要添加unicode支持,请使用模式
(?:\b[\w\p{L}]+(?:[^\w\p{L}]+|$)){1000}
答案 1 :(得分:1)
我怀疑每个人都比这更困难。你真的在乎“语言”是否是语言意义上的单词?或者这会吗?
\S+(?:\s+\S+){999}
如果是这样,如果你的正则表达式支持占有量词,我推荐的实际正则表达式是:
\S++(?:\s++\S++){999}
如果无法匹配,这将失败得多。例如,当我尝试在RegexBuddy中将字符串与999个字匹配时,第一个正则表达式需要21,870个步骤才能失败,而所有格版本只需要3,996个步骤。如果你没有占有量词,但你确实有原子组,那么这个步骤需要4,008步才能失败:
\S+(?>\s+\S+){999}
性能可能无关紧要,因为您正在使用正则表达式来验证用户输入。我提出它是因为在这些情况下创建一个锁定机器的正则表达式非常容易。而这通常发生在无法找到匹配的情况下。当您测试正则表达式时,您应该至少具有与匹配测试一样多的非匹配测试。
答案 2 :(得分:0)
因为@Asad似乎害羞地回答
(\b\w+\b\s+){1000,}
匹配单词边界(\b
)后跟一个字符,该字符可以是单词的一部分或多次(\w+
)后跟一个单词边界,以及一个或多个空格字符(\b\s+
- 空格也可以是标签等...)至少1000次((...){1000,}
)
答案 3 :(得分:0)
使用前瞻:
^(?=(.*\b\w+\b){1000,})
请注意,这是一个以盎格鲁为中心的解决方案。对于其他语言,\w
需要替换为“非标点符号或空格”正则表达式或类似名称。此外,这不能满足撇号的用语。
答案 4 :(得分:0)
这是一个计算非空格块数的表达式。
^(?>\s*\S+){1000,}\s*$
这不是一个完美的解决方案,因为它在下面的字符串“Ambassador T'Pel”中计算了2个单词,而实际上有3个单词。但它保持正则表达式非常简单,它可能足以满足您的要求。
这个正则表达式也非常快,因为它可以将回溯保持在最低限度。