我需要一个正则表达式来检测给定字符串中的短语 Figure 1.5:
。此外,我打算在 PHP preg_replace()
函数中使用此表达式。
这里还有一些例子:
- ...已给出。
图 2.1:
显示... - ...已给出。
图 3:
显示... - ...已给出。
图 1.16:
显示... - ...已给出。
图 0.4
显示... - ...已给出。
图 5.1:
显示...
凭借我有限的 Regex 知识,我能够创建这个:
/\w图\d*\.?\d*/g
但这还没有开始处理所有可能发生的排列。
如果您有任何建议,我将不胜感激。
最佳答案
这里有几点:
- 您可能在开头使用
\w
作为单词边界。事实上,\w
匹配字母、数字或_
并且实际上要求此字符位于准确位置。但是,Figure
之前没有单词 char,因此您需要删除\w
或替换为\b
。 preg_replace
默认替换所有非重叠出现,你不需要g
修饰符\d*\.?\d*
在这里没问题,但由于您想匹配任何数字后跟零次或多次出现的.
和数字,您可以使用更具体的模式,如\d+(?:\.\d+)*
.
你可以使用
preg_replace('/Figure \d+(?:\.\d+)*/', '', $string)
参见 regex demo .
详细信息:
图
- 一个字符串\s+
以匹配任何一个或多个空格,并考虑在最后一个之后添加
如果你需要找到所有的 Unicode 空格)u
标志/\d+
- 一个或多个数字(?:\.\d+)*
-.
和一位或多位数字出现零次或多次。
关于php - 正则表达式选择某个单词后跟整数或小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66781954/