在字符串之间获取字符串,而不包括Regex中匹配的字符串

时间:2015-08-25 21:26:05

标签: php html regex

如果我想从

中提取ABC
<td>ABC</td>

<td id="id">ABC</td>

使用相同的正则表达式,我该怎么做?

<td[\s\S]*?>[\s\S]*?<\/td>

这符合这种情况,但我想在开头和结尾排除匹配的td标记。

2 个答案:

答案 0 :(得分:1)

方法1:捕获组

<td[\s\S]*?>([\s\S]*?)<\/td>

将正则表达式的一部分括在您感兴趣的括号中,然后引用此capturing group(使用$1\1作为后向引用,具体取决于正则表达式的风格)。 编辑\1使用\K

方法2: Lookbehind / lookahead

编辑: 在下面进行了修改,使用<td\b[^>]*>\K.*?(?=</td>) 代替可变长度的lookbehind - 在评论中归功于Jonny 5的优点。

package com.test.webservertest;

public class MainActivity extends ActionBarActivity
{
    private static final int MY_DATA_CHECK_CODE = 0;
    public static MainActivity currentActivity;
    TextToSpeech mTts;
    private String targetURL;
    private String urlParameters;
    private Button btnClick;
    private String clicking = "clicked";
    private String[] ipaddresses = new String[]{
        "http://10.0.0.3:8098/?cmd=nothing"};
    private String iptouse = "";
    private TextView text;
    private boolean connectedtoipsuccess = false;
    private int counter = 0;
    private NotificationCompat.Builder mbuilder;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        addListenerOnButton();
        currentActivity = this;
        initTTS();
    }

然后搜索标签但不包括在匹配中。请参阅PCREhere,以获得比我能给出的更好的解释。

答案 1 :(得分:1)

您不应该使用正则表达式来解析有效的HTML文件/片段中的数据。您可以使用带有td的{​​{1}}获取DOMDocument代码内容:

DOMXPath

请参阅IDEONE demo