与RegExp链接,链接词不起作用

时间:2015-06-24 08:49:17

标签: android regex textview clickable linkify

我想将此RegExp /([^\s])+/g应用于TextView Linkify,以使每个单词都可以点击。

我在http://regexr.com/上测试了该表达式是否正常工作,但当我应用Linkify句时,没有任何内容可以点击。

我尝试做一个简单的String.split(regExp),我只收到一个包含整个String的项目。

我做错了什么?

简单测试

TextView t = (TextView)findViewById(R.id.aa);
t.setText("Con cien cañones por banda, viento en popa a toda vela, no corta el mar, sino vuela, un velero bergantín: bajel pirata que llaman por su bravura el Temido, en todo mar conocido del uno al otro confín. La luna en el mar riela, en la lona gime el viento, y alza en blando movimiento olas de plata y azul; y ve el capitán pirata, cantando alegre en la popa, Asia a un lado, al otro Europa y allá a su frente Stambul. «Navega, velero mío, sin temor, que ni enemigo navío, ni tormenta, ni bonanza, tu rumbo a torcer alcanza, ni a sujetar tu valor. «Veinte presas hemos hecho a despecho del inglés, y han rendido sus pendones cien naciones a mis pies. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar! «Allá muevan feroz guerra ciegos reyes por un palmo más de tierra: que yo tengo aquí por mío cuanto abarca el mar bravío, a quien nadie impuso leyes. «Y no hay playa sea cual quiera, ni bandera de esplendor, que no sienta mi derecho y dé pecho a mi valor. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar! «A la voz de «¡barco viene!» Es de ver cómo vira y se previene a todo trapo a escapar: que yo soy el rey del mar, y mi furia es de temer. «En las presas yo divido lo cogido por igual: sólo quiero por riqueza la belleza sin rival. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar! «¡Sentenciado estoy a muerte! Yo me río: no me abandone la suerte, y al mismo que me condena, colgaré de alguna antena, quizá en su propio navío. «Y si caigo, ¿qué es la vida? Por perdida ya la di cuando el yugo del esclavo, como un bravo, sacudí. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar! «Son mi música mejor aquilones; el estrépito y temblor de los cables sacudidos, del negro mar los bramidos y el rugir de mis cañones. «Y del trueno al son violento, y del viento al rebramar, yo me duermo sosegado. Arrullado por el mar. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar!");
String[] ss = t.getText().toString().split("/([^\\s])+/g");

关联代码

    ...
    TextView t = (TextView)findViewById(R.id.aa);
    t.setText("Con cien cañones por banda, viento en popa a toda vela, no corta el mar, sino vuela, un velero bergantín: bajel pirata que llaman por su bravura el Temido, en todo mar conocido del uno al otro confín. La luna en el mar riela, en la lona gime el viento, y alza en blando movimiento olas de plata y azul; y ve el capitán pirata, cantando alegre en la popa, Asia a un lado, al otro Europa y allá a su frente Stambul. «Navega, velero mío, sin temor, que ni enemigo navío, ni tormenta, ni bonanza, tu rumbo a torcer alcanza, ni a sujetar tu valor. «Veinte presas hemos hecho a despecho del inglés, y han rendido sus pendones cien naciones a mis pies. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar! «Allá muevan feroz guerra ciegos reyes por un palmo más de tierra: que yo tengo aquí por mío cuanto abarca el mar bravío, a quien nadie impuso leyes. «Y no hay playa sea cual quiera, ni bandera de esplendor, que no sienta mi derecho y dé pecho a mi valor. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar! «A la voz de «¡barco viene!» Es de ver cómo vira y se previene a todo trapo a escapar: que yo soy el rey del mar, y mi furia es de temer. «En las presas yo divido lo cogido por igual: sólo quiero por riqueza la belleza sin rival. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar! «¡Sentenciado estoy a muerte! Yo me río: no me abandone la suerte, y al mismo que me condena, colgaré de alguna antena, quizá en su propio navío. «Y si caigo, ¿qué es la vida? Por perdida ya la di cuando el yugo del esclavo, como un bravo, sacudí. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar! «Son mi música mejor aquilones; el estrépito y temblor de los cables sacudidos, del negro mar los bramidos y el rugir de mis cañones. «Y del trueno al son violento, y del viento al rebramar, yo me duermo sosegado. Arrullado por el mar. «¿Qué es mi barco? Mi tesoro. ¿Qué es mi Dios? La libertad. ¿Mi ley? ¡La fuerza y el viento! ¿Mi única patria? ¡La mar!");
    addLink(t, "/([^\\s])+/g","http://google.com");
}

/**
* Add a link to the TextView which is given.
*
* @param textView the field containing the text
* @param patternToMatch a regex pattern to put a link around
* @param link the link to add
*/
public static void addLink(TextView textView, String patternToMatch,
                       final String link) {
Linkify.TransformFilter filter = new Linkify.TransformFilter() {
    @Override public String transformUrl(Matcher match, String url) {
        return link;
    }
};
Linkify.addLinks(textView, Pattern.compile(patternToMatch), null, null,
        filter);
}

1 个答案:

答案 0 :(得分:0)

在Java中,您不必使用JS语法来定义正则表达式。

.split("/([^\\s])+/g");替换为.split("([^\\s])+");,类似于Linkify。

另请注意,[^\s]相当于\S,因此我认为您可以将正则表达式简化为\S+(假设您不需要捕获组)。