正则表达式,用于匹配字符串分隔符内的任何字符

时间:2019-04-27 08:33:03

标签: java regex

我有格式为

的字符串
protected void onServiceConnected() {
    super.onServiceConnected();

 FingerprintGestureController gestureController = getFingerprintGestureController();

 Log.e(TAG, "Is available: " + gestureController.isGestureDetectionAvailable());

 FingerprintGestureController.FingerprintGestureCallback callback = new

 FingerprintGestureController.FingerprintGestureCallback() {

                public void onGestureDetectionAvailabilityChanged(boolean available) {
                    super.onGestureDetectionAvailabilityChanged(available);
                    Log.d(TAG, "onGestureDetectionAvailabilityChanged " + available);
                }


                public void onGestureDetected(int gesture) {

                    switch (gesture) {
                        case FINGERPRINT_GESTURE_SWIPE_UP:
                            scrollDown();
                            break;
                        case FINGERPRINT_GESTURE_SWIPE_DOWN:
                            scrollUp();
                            break;
                        case FINGERPRINT_GESTURE_SWIPE_RIGHT:
                            execute_swipe_right_functionality();
                            break;
                        case FINGERPRINT_GESTURE_SWIPE_LEFT:
                            execute_swipe_left_functionality();
                            break;
                        default:
                            Log.e("My Service",
                                    "Error: Unknown gesture type detected!");
                            break;
                    }
                }
            };

    gestureController.registerFingerprintGestureCallback(callback, new Handler());
}

我需要用正则表达式替换PATH_VARIABLE,以便它使我可以在分隔符之间匹配任何内容,或者在末尾不进行任何匹配,这样当我将正则表达式字符串与输入字符串匹配时,我就可以完全匹配

/person/PATH_VARIABLE/address/PATH_VARIABLE
/person/PATH_VARIABLE/PATH_VARIABLE
/person/PATH_VARIABLE/address
.....
etc

我尝试了一些事情

/person/abc/address/xy123 matches with the first
/person/abc/1233 matches with the second

1 个答案:

答案 0 :(得分:1)

您正在使正则表达式复杂化,以替换为“ PATH_VARIABLE”。它可以像[^/]*一样简单-每个不是/的字符。

y = y.replaceAll("PATH_VARIABLE", "[^/]*");
y1 = y1.replaceAll("PATH_VARIABLE", "[^/]*");

但是,这仅在路径的其余部分不包含在正则表达式中具有特殊含义的字符时才有效。在您显示的特定情况下,它没有此类字符。

如果您的路径中确实包含类似的字符,那么您需要将PATH_VARIABLE\Q中除\E以外的所有内容包装起来,以便按字面意义对待它们。

例如,/person+hello/PATH_VARIABLE/address/PATH_VARIABLE首先需要成为这样:

\Q/person+hello/\EPATH_VARIABLE\Q/address/\EPATH_VARIABLE

,然后您可以替换PATH_VARIABLE

您可以通过找到所有\Q的开始和结束索引并将其插入来添加\EPATH_VARIABLE