regex - 用于查找后跟空格的最后一个字母字符位置的正则表达式?

标签 regex coldfusion

我正在使用 ColdFusion 10。我很少需要使用正则表达式,确实需要一些帮助。

我有一些冗长的内容(最多 8,000 个字符)并且想创建一个预告片。在一定长度(我将在别处定义)之后,我想找到最后一个后跟空格的字母字符。我将删除该字符之后的所有内容。然后我将添加省略号 (...)

MyString = "The lazy brown fox is not a dog."

在这种情况下,我会删除“dog”之前的“a”之后的所有内容。

MyString = "There are 123 boxes on up the hill, says that 612 guy."

在这种情况下,我会删除“612”之前的“that”之后的所有内容。

MyString = "I fell down the stairs on June 30th, 1962."

在这种情况下,我会删除“30th”之前的“June”之后的所有内容。

我将使用什么正则表达式来查找后跟空格的最后一个字母 [a-Z] 字符的位置?

MyReg = "";
LastPosition = reFindNoCase(MyReg, MyString);

最佳答案

我不确定 REFindNoCase,但我认为您可以尝试使用 REReplaceNoCase。我希望 CF 可以像大多数正则表达式引擎一样收回引用:

REReplaceNoCase(MyString, "(.*\b[a-zA-Z]+\b)\s.*", "$1", ALL);

编辑:对于反向引用,您似乎使用了反斜杠而不是美元符号:

REReplaceNoCase(MyString, "(.*\b[a-zA-Z]+\b)\s.*", "\1", ALL);

如果一切顺利,你应该有类似 this 的东西.

.* 匹配换行符以外的任何内容,\b 匹配单词边界,[a-zA-Z]+ 用于字母表字符和 \s 是它后面的空格。

第一个 .* 的贪婪在这里被利用来尽可能多地捕获,直到你得到最后一个单词后跟一个空格。

我想你可以像这样在 $1 之后添加省略号:

REReplaceNoCase(MyString, "(.*\b[a-zA-Z]+\b)\s.*", "\1 (...)", ALL)

如果你只想使用REFind(),你可以使用这个:

REFindNoCase("[A-Za-z](?:\s\d+|\w+,)*\s[^\s]+\.$", MyString);

请注意,我还没有针对其他可能的情况对此进行测试,但我尝试了一些不适用于上述但适用于此的情况:

REFindNoCase("[A-Za-z](?:\s\d+|\s?\w+[,.-]+)*\s[^\s]+[.\s]*$", MyString);

这些是少数测试对象:link .

REFind 将为您提供最后一个字母字符的位置。可以加1得到空格在原字符串中的位置。

关于regex - 用于查找后跟空格的最后一个字母字符位置的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17602024/

相关文章:

MySQL REGEXP 匹配正数

regex - awk 或 sed : Return lines between two instances of the same pattern

mysql - 日期时间列上的 orderby 问题

sql - CFScript 中的动态 SQL

MySQL - 从同一表中的 2 行返回一行,用第二个 'default' 的填充字段覆盖第一个 'override' 的内容

Python 正则表达式 : How to specify an optional match (for potentially empty sub expression)?

php - 如何在 PHP 中替换字符串中的非 ASCII 字符?

html - 如何 htaccess 301 重定向在 url 中带有问号的页面

design-patterns - CFML 设计模式资源?

c# - Coldfusion 8 互操作的最大 .NET 版本?