我正在使用 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/