Php 用于替换数字(数字/字)和字的组合的正则表达式
我使用以下代码将数字和字符串替换为替换文本Php 用于替换数字(数字/字)和字的组合的正则表达式,php,jquery,regex,Php,Jquery,Regex,我使用以下代码将数字和字符串替换为替换文本 var rule = (\d+\s((apple\b|apples\b|Apple\b|Apples\b)+)) var search_regexp = new RegExp(rule, "ig"); return masterstring.replace(search_regexp,replacetext); 输入字符串:10个苹果比100个梨好 更换:10个橙子 结果:10个橙子比100个梨好 如何有一个正则表达式来处理10个苹果和10个苹果
var rule = (\d+\s((apple\b|apples\b|Apple\b|Apples\b)+))
var search_regexp = new RegExp(rule, "ig");
return masterstring.replace(search_regexp,replacetext);
- 输入字符串:
10个苹果比100个梨好
- 更换:
10个橙子
- 结果:
10个橙子比100个梨好
10个苹果
和10个苹果
?说一个来识别
(a number in digits or word)+space+(a case insensitive word)
使用jQuery和php将其替换为10个橙子?如果您只想匹配有效的数字“单词”,则必须在正则表达式中包含所有要包含的数字
(一|二|三|四|五|六|七|八|九|十)
等
这可以通过组合以相同字母开头的单词来改进:
(一个t(两个)f(我们的ive)s(九个偶数)|八个|九)
然后,您可以将\d+
作为第一个选项:
(\d+|一| t(wo | hree | en)f(我们的ive)s(ix |偶数)|八|九)
正如一些人在评论中所说,您使用的是不区分大小写的修饰符,因此我已经完成了所有小写)
请注意,如果你想超过10,这将变得相当长,很难提高效率,我已经快速尝试了,并创建了一个野兽般的正则表达式,我没有尝试过太多优化
(?:
\d+
|t(?:en|hirteen)
|eleven
|twelve
|fifteen
|(?:
(?:twenty|thirty|fourty|fifty|sixty|seventy|eighty|ninety)
(?:[ -](?:one|t(?:wo|hree)|f(?:our|ive)|s(?:ix|even)|eight|nine))?
)
|(?:one|t(?:wo|hree)|f(?:our(?:teen)?|ive)|s(?:ix|even)(?:teen)?|eight(?:een)?|nine(?:teen)?)
)[ ]apples?
我已将其扩展到几行,并在在线示例中添加了“x”修饰符-这使其更易于阅读,这在PHP中有效,但在javascript中无效,您必须删除换行符/空格才能在JS中使用)
[此处为在线工作示例)
同样值得一提的是,在正则表达式中这样做可能不是最好的方法——字符串标记器将占用更少的cpu时间,但会涉及更多的代码
标记器的一个示例:将单词和数字分组为更改?除非您在正则表达式中逐个迭代数字,否则这是不可能的。另外,请注意,由于您使用的是
i
修饰符,(\d++\s((apple\b | apple\b | apple\b | apple\b | apples\b)+)
=(\d++\s((apples?\b)+)
三十万、四百二十八个苹果
比一百个梨好。替换的300428个橙子
比一百个梨好。我现在正在试这个。谢谢你指出不区分大小写。尽管我会选择复数和单数(苹果)。