Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于替换数字(数字/字)和字的组合的正则表达式_Php_Jquery_Regex - Fatal编程技术网

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个橙子
比一百个梨好。我现在正在试这个。谢谢你指出不区分大小写。尽管我会选择复数和单数(苹果)。