

El siguiente ejemplo muestra un programa estilo grep: solicita
una expresión regular para aplicarla luego a una serie de entradas
leídas desde la entrada estandar.
casiano@nereida:~/projects/PA/regexp$ cat -n Application.java
1 /**
2 * javac Application.java
3 * java Application
4 */
5
6 import java.io.*;
7 import java.util.regex.Pattern;
8 import java.util.regex.Matcher;
9
10 public class Application {
11
12 public static void main(String[] args){
13 String regexp = "";
14 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
15 try {
16 System.out.print("Enter your regex: ");
17 regexp = br.readLine();
18 } catch (IOException e) { System.exit(1); };
19 while (true) {
20
21 String input = "";
22 try {
23 System.out.print("Enter input string to search: ");
24 input = br.readLine();
25 } catch (IOException e) { System.exit(1); };
26
27 Pattern pattern = Pattern.compile(regexp);
28 Matcher matcher = pattern.matcher(input);
29
30 boolean found = false;
31 while (matcher.find()) {
32 System.out.println("I found the text "
33 + matcher.group()
34 + " starting at index "
35 + matcher.start()
36 + " and ending at index "
37 +matcher.end()
38 );
39 found = true;
40 }
41 if(!found){
42 System.out.println("No match found.");
43 }
44 }
45 }
46 }
Ejecución:
casiano@nereida:~/Ljavatesting$ java Application Enter your regex: (\d+).(\d+) Enter input string to search: a4b5d6c7efg I found the text 4b5 starting at index 1 and ending at index 4 I found the text 6c7 starting at index 5 and ending at index 8 Enter input string to search: abc No match found. Enter input string to search:
Véase también Java Regular Expressions
Esta es una versión en bash del conversor de temperaturas
visto en las secciones anteriores:
pl@nereida:~/src/bash$ cat -n f2c
1 #!/bin/bash
2 echo "Enter a temperature (i.e. 32F, 100C):";
3 read input;
4
5 if [ -z "$(echo $input | grep -i '^[-+]\?[0-9]\+\(\.[0-9]*\)\?\ *[CF]$')" ]
6 then
7 echo "Expecting a temperature, so don't understand \"$input\"." 1>&2;
8 else
9 input=$(echo $input | tr -d ' ');
10 InputNum=${input:0:${#input}-1};
11 Type=${input: -1}
12
13 if [ $Type = "c" -o $Type = "C" ]
14 then
15 celsius=$InputNum;
16 fahrenheit=$(echo "scale=2; ($celsius * 9/5)+32" | bc -l);
17 else
18 fahrenheit=$InputNum;
19 celsius=$(echo "scale=2; ($fahrenheit -32)*5/9" | bc -l);
20 fi
21
22 echo "$celsius C = $fahrenheit F";
23 fi
pl@nereida:~/src/regexpr$ cat -n pcregrep.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <assert.h>
5 #include <pcre.h>
6
7 char enter_reverse_mode[] = "\33[7m";
8 char exit_reverse_mode[] = "\33[0m";
9
10 int main(int argc, char **argv)
11 {
12 const char *pattern;
13 const char *errstr;
14 int erroffset;
15 pcre *expr;
16 char line[512];
17 assert(argc == 2); /* XXX fixme */
18 pattern = argv[1];
19 if (!(expr = pcre_compile(pattern, 0, &errstr, &erroffset, 0))) {
20 fprintf(stderr, "%s: %s\n", pattern, errstr);
21 return EXIT_FAILURE;
22 }
23 while (fgets(line, sizeof line, stdin)) {
24 size_t len = strcspn(line, "\n");
25 int matches[2];
26 int offset = 0;
27 int flags = 0;
28 line[len] = '\0';
29 while (0 < pcre_exec(expr, 0, line, len, offset, flags, matches, 2)) {
30 printf("%.*s%s%.*s%s",
31 matches[0] - offset, line + offset,
32 enter_reverse_mode,
33 matches[1] - matches[0], line + matches[0],
34 exit_reverse_mode);
35 offset = matches[1];
36 flags |= PCRE_NOTBOL;
37 }
38 printf("%s\n", line + offset);
39 }
40 return EXIT_SUCCESS;
41 }
Compilación:
pl@nereida:~/src/regexpr$ gcc -lpcre pcregrep.c -o pcregrep
Cuando se ejecuta espera un patrón en la línea de comandos y pasa a leer desde la entrada estandar. Las cadenas que casan se muestran resaltadas:
pl@nereida:~/src/regexpr$ ./pcregrep '\d+' 435 otro 23435 otro 23
hola hola
pl@nereida:~/src/python$ cat -n c2f.py 1 #!/usr/local/bin/python 2 import re 3 4 temp = raw_input( ' Introduzca una temperatura (i.e. 32F, 100C): ' ) 5 pattern = re.compile( "^([-+]?[0-9]+(\.[0-9]*)?)\s*([CF])$", re.IGNORECASE ) 6 mo = pattern.match( temp ) 7 8 if mo: 9 inputNum = float(mo.group( 1 )) 10 type = mo.group( 3 ) 11 celsius = 0.0 12 fahrenheit = 0.0 13 if ( type == "C" or type == "c" ) : 14 celsius = inputNum 15 fahrenheit = ( celsius * 9/5 ) + 32 16 else : 17 fahrenheit = inputNum 18 celsius = ( fahrenheit - 32 ) * 5/9 19 print " ", '%.2f'%(celsius), " C = ", '%.2f'%(fahrenheit), " F\n" 20 else : 21 print " Se experaba una temperatura, no se entiende", temp, "\n"
pl@nereida:~/src/ruby$ cat -n f2c_b
1 #!/usr/bin/ruby
2
3 # Primero leemos una temperatura
4 class Temperature_calculator
5 def initialize temp
6 comp = Regexp.new('^([-+]?\d+(\.\d*)?)\s*([CFcf])$')
7 if temp =~ comp
8 begin
9 cifra = Float($1)
10 @C,@F = ( $3 == "F" or $3 == "f")? [(cifra -32) * 5/9, cifra] : [cifra , cifra * 9/5 + 32]
11 end
12 else
13 raise("Entrada incorrecta")
14 end
15 end
16
17 def show
18 puts "Temperatura en Celsius: #{@C}, temperatura en Fahrenheit: #{@F}"
19 end
20 end
21
22 temperatura = Temperature_calculator.new(readline.chop)
23 temperatura.show
<SCRIPT LANGUAGE="JavaScript"><!--
function demoMatchClick() {
var re = new RegExp(document.demoMatch.regex.value);
if (document.demoMatch.subject.value.match(re)) {
alert("Successful match");
} else {
alert("No match");
}
}
function demoShowMatchClick() {
var re = new RegExp(document.demoMatch.regex.value);
var m = re.exec(document.demoMatch.subject.value);
if (m == null) {
alert("No match");
} else {
var s = "Match at position " + m.index + ":\n";
for (i = 0; i < m.length; i++) {
s = s + m[i] + "\n";
}
alert(s);
}
}
function demoReplaceClick() {
var re = new RegExp(document.demoMatch.regex.value, "g");
document.demoMatch.result.value =
document.demoMatch.subject.value.replace(re,
document.demoMatch.replacement.value);
}
// -->
</SCRIPT>
<FORM ID="demoMatch" NAME="demoMatch" METHOD=POST ACTION="javascript:void(0)">
<P>Regexp: <INPUT TYPE=TEXT NAME="regex" VALUE="\bt[a-z]+\b" SIZE=50></P>
<P>Subject string: <INPUT TYPE=TEXT NAME="subject"
VALUE="This is a test of the JavaScript RegExp object" SIZE=50></P>
<P><INPUT TYPE=SUBMIT VALUE="Test Match" ONCLICK="demoMatchClick()">
<INPUT TYPE=SUBMIT VALUE="Show Match" ONCLICK="demoShowMatchClick()"></P>
<P>Replacement text: <INPUT TYPE=TEXT NAME="replacement" VALUE="replaced" SIZE=50></P>
<P>Result: <INPUT TYPE=TEXT NAME="result"
VALUE="click the button to see the result" SIZE=50></P>
<P><INPUT TYPE=SUBMIT VALUE="Replace" ONCLICK="demoReplaceClick()"></P>
</FORM>

