Регулярные выражения в ColdFusion - PullRequest
3 голосов
/ 12 января 2011

Как обрезать начальные и конечные нули с помощью перестановки?

Это как-то связано с кареткой, звездой и знаком доллара.

и 0.

Вот шпаргалка: http://www.petefreitag.com/cheatsheets/regex/

Ответы [ 6 ]

19 голосов
/ 12 января 2011
reReplace(string, "^0*(.*?)0*$", "$1", "ALL")

То есть:

^ = starting with
0* = the character "0", zero or more times
() = capture group, referenced later as $1
.* = any character, zero or more times
*? = zero or more, but lazy matching; try not to match the next character
0* = the character "0", zero or more times, this time at the end
$ = end of the string
4 голосов
/ 12 января 2011
<cfset newValue = REReplace(value, "^0+|0+$", "", "ALL")>
1 голос
/ 12 января 2011

Это, кажется, работает .. будет проверять ваши варианты использования.

<cfset sTest= "0001" />
<cfset sTest= "leading zeros? 0001" />
<cfset sTest= "leading zeros? 0001.02" />
<cfset sTest= "leading zeros? 0001." />
<cfset sTest= "leading zeros? 0001.2" />

<cfset sResult= reReplace( sTest , "0+([0-9]+(\.[0-9]+)?)" , "\1" , "all" ) />
1 голос
/ 12 января 2011

Я не эксперт по холодному синтезу, но что-то вроде, замените все ^ 0 + и 0 + $ пустой строкой, например:

REReplace("000xyz000","^0+|0+$","")
0 голосов
/ 31 мая 2017

Это сообщение довольно старое, но я пишу на тот случай, если кто-нибудь посчитает его полезным. Я обнаружил, что мне нужно обрезать пользовательские символы несколько раз, поэтому я хочу поделиться недавним помощником, который я написал, чтобы обрезать любой пользовательский символ, используя rereplace, если вы считаете это полезным. Он работает так же, как обычная обрезка, но вы можете передать любую произвольную строку символов в качестве второго параметра и обрезать все начальные / конечные символы.

   /**
    * Trims leading and trailing characters using rereplace
    * @param string - string to trim
    * @param string- custom character to trim
    * @return string - result
    */
    function $trim(required string, string customChar=" "){
        var result = arguments.string;

        var char = len(arguments.customChar) ? left(arguments.customChar, 1) : ' ';

        char = reEscape(char);

        result = REReplace(result, "#char#+$", "", "ALL");
        result = REReplace(result, "^#char#+", "", "ALL");

        return result;
    }

В вашем случае вы можете просто использовать этот помощник, чтобы сделать что-то вроде:

string = "0000foobar0000";
string = $trim(string, "0");
//string now "foobar"

надеюсь, это кому-нибудь поможет :)

0 голосов
/ 27 мая 2017

Выше не работает вообще, кроме ответа Брэдли!

В ColdFusion для ссылки на группу захвата вам нужно \ вместо $, например. \1 вместо $1.

Итак, правильный ответ:

reReplace(string, "^0*(.*?)0*$", "\1", "ALL")

То есть:

^  = starting with
0* = the character "0", zero or more times
() = capture group, referenced later as $1
.* = any character, zero or more times
*? = zero or more, but lazy matching; try not to match the next character
0* = the character "0", zero or more times, this time at the end
$  = end of the string

И

\1 reference to capture group 1  (see above, introduced by ( )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...